支付回调安全规范 当系统涉及第三方支付回调(微信支付、支付宝等)或 webhook 通知时,防止伪造、篡改和重放攻击。 --- 陷阱 #1: 回调未验证平台签名 场景 : 收到支付回调后直接解密/解析并处理,未验证请求确实来自支付平台 问题根因 支付回调地址暴露在公网,任何人都可以伪造请求。如果不验签,攻击者可以构造假的"支付成功"通知。 错误示例 正确做法 关键区分 | 密钥/证书 | 用途 | 持有方 | |-----------|------|--------| | 商户私钥 | 商户请求微信时签名 | 商户 | | 商户 API 证书 | 商户身份标识 | 商户 | | 微信支付平台公钥/证书 | 验证微信回调签名 | 微信平台签发,商户持有公钥 | | API V3 Key | 解密回调通知体 | 商户 | 检查清单 - [ ] 回调入口是否在解密前先验证平台签名 - [ ] 验签使用的是平台公钥/证书,而非商户私钥 - [ ] 是否按 匹配对应平台证书(支持证书轮换) - [ ] 验签失败是否直接拒绝,不继续处理 --- 陷阱 #2: 未做防重放校验 场景 : 攻击者截获一份真实的支付成功回调,重复发送给系统 问题根因 合法的旧回调报文签名仍然有效,仅靠验签无法防止重放。 错误示例 正确做法 检查清单 - [ ] 是否校验回调时间戳窗口(建议 5 分钟) - [ ]…