如何使用 Stripe 保护 Django 中的 webhook



我有一个webhook视图,它从支付网关接收POST请求。它识别客户并使用提供的数据更新金额。

如果 webhook URL 以某种方式泄露,这很容易被利用。

例如

curl --data "cust_no=xxxxxxxxxx&amount=1000" https://example.com/wallet/payment_webhook/

如何使其安全,使其不接受此类请求?它应该验证请求是否仅来自支付网关。

更新:

Webhook 请求包含交易详细信息以及客户编号。

它明确记录在 webhooks 文档中:

最佳实践

[...]

为了获得最佳安全性,您可以在对事件数据采取行动之前与 Stripe 确认事件数据。为此:

  1. 上述方式解析 JSON 数据。
  2. 获取收到的Event对象 ID 值。
  3. 在检索事件 API 调用中使用Event对象 ID。
  4. 使用返回的Event对象执行操作。

另请参阅 Webhook-Mailer 以获取工作示例。特别注意这一行:

# Retrieving the event from the Stripe API guarantees its authenticity  
event = Stripe::Event.retrieve(data[:id])

最新更新