PonponPay
高级6 分钟阅读

Webhook 安全最佳实践

用签名校验、幂等处理和密钥轮换,保证回调通知安全可靠。

上线前检查清单

  • 仅允许 HTTPS 回调地址
  • 校验时间戳并限制重放窗口
  • 使用 HMAC 进行签名验证
  • 每个事件实现幂等处理
  • 异常回调写入审计日志

密钥轮换策略

建议每 90 天轮换一次 webhook secret。轮换期间短时同时支持新旧 secret,验证通过后逐步移除旧值。

幂等处理

对 `order_no + status` 建立唯一处理记录。重复事件直接返回 200,避免重复发货或重复记账。

Node.js

import crypto from 'crypto';

export function verifyWebhook({ rawBody, timestamp, signature, secret }) {
  const payload = `${timestamp}.${rawBody}`;
  const expected = crypto.createHmac('sha256', secret).update(payload).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}