【问题标题】:How to secure a webhook in Django using Stripe如何使用 Stripe 在 Django 中保护 webhook
【发布时间】:2016-05-04 13:34:37
【问题描述】:

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

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

例如

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

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

更新:

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

【问题讨论】:

  • 很难说没有关于模型的信息......你使用什么授权?客户编号是否与request.user 的相同?
  • 是的。支付网关向我提供交易信息以及客户编号。
  • 我会说网关有责任正确地验证自己。查阅其文档。如果您需要帮助,请说明您使用的支付网关。
  • 同意@AndreaCorbellini,就像 Paypal 限制用户付款通知 webhook 以通过将相同数据回发到另一个 Paypal URL 来验证数据。所以你的支付网关必须有类似的东西。
  • 我检查了 Stripe 文档,没有任何东西可以处理它。在这里查看stripe.com/docs/webhooks

标签: python django stripe-payments payment


【解决方案1】:

webhooks documentation 上明确记录了它:

最佳做法

[...]

为了获得最佳安全性,您可以在对事件数据采取行动之前使用 Stripe 确认它。这样做:

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

有关工作示例,另请参阅 Webhook-Mailer。特别关注this line:

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

【讨论】:

  • 谢谢!我会做出必要的改变。
  • 除此之外,您还可以使用 HTTP 基本身份验证,即您可以在 Stripe 设置中将 webhook 端点设置为 username:password@yourserver.com/example.com/wallet/…。在您的事件处理程序中,您可以验证您收到的用户名和密码是否与您在 Stripe 中设置的相同。
猜你喜欢
  • 2012-03-11
  • 2021-02-04
  • 2017-04-04
  • 2019-03-01
  • 2015-04-02
  • 2018-10-25
  • 2019-01-30
  • 2020-09-08
  • 2022-01-05
相关资源
最近更新 更多