我有一个webhook视图,它从支付网关接收POST
请求。它识别客户并使用提供的数据更新金额。
如果 webhook URL 以某种方式泄露,这很容易被利用。
例如
curl --data "cust_no=xxxxxxxxxx&amount=1000" https://example.com/wallet/payment_webhook/
如何使其安全,使其不接受此类请求?它应该验证请求是否仅来自支付网关。
更新:
Webhook 请求包含交易详细信息以及客户编号。
它明确记录在 webhooks 文档中:
最佳实践
[...]
为了获得最佳安全性,您可以在对事件数据采取行动之前与 Stripe 确认事件数据。为此:
按
- 上述方式解析 JSON 数据。
- 获取收到的
Event
对象 ID 值。- 在检索事件 API 调用中使用
Event
对象 ID。- 使用返回的
Event
对象执行操作。
另请参阅 Webhook-Mailer 以获取工作示例。特别注意这一行:
# Retrieving the event from the Stripe API guarantees its authenticity
event = Stripe::Event.retrieve(data[:id])