配置Stripe Webhook签名时是否需要拒绝未签名事件
关于示例代码中else分支的说明
为什么官方示例会同时支持两种处理逻辑
Stripe的官方示例是面向全阶段开发者的通用代码,保留else分支是为了降低上手门槛:
- 初学者本地调试、快速验证业务逻辑时,可能还没完成Webhook签名配置,甚至会手动构造测试事件,else分支可以让他们暂时跳过验签环节,先跑通核心业务流程
- 代码注释里也明确标注了,该分支仅用于未配置签名的场景,本身就不推荐生产环境使用
配置签名后必须删除else分支
你的判断完全正确:保留else分支会彻底抵消Webhook验签的安全作用。
如果不删这个分支,攻击者只要故意不带stripe-signature请求头调用你的Webhook接口,代码就会直接进入else分支,不会做任何合法性校验,攻击者可以随意伪造支付成功、订阅开通的事件,触发你这边的权益发放逻辑,直接造成资金损失。
生产环境额外注意事项
- 删除else分支后,可额外增加前置校验:如果请求头中没有
stripe-signature,直接返回400拒绝请求,不需要走后续验签逻辑 - Webhook接口必须保留原始请求体用于验签,不要用服务端框架的JSON解析中间件提前处理请求体,否则会导致验签失败
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

