【问题标题】:Is it ok to pass payment_method_tokens from client to server?可以将 payment_method_tokens 从客户端传递到服务器吗?
【发布时间】:2018-06-20 04:28:44
【问题描述】:

我目前正在使用 Braintree 服务器包 (Node.js),并且正在努力实现订阅。

作为中间步骤,我正在管理每个客户的付款方式列表,该列表位于客户对象中:customer.paymentMethods

我想确保将这个列表直接传递给客户端是可以的。本质上,我想列出所有当前的付款方式,并创建一种添加新方式/删除现有方式的方法。选择付款方式后,我可以将payment_method_token 传递给服务器以使用此付款方式执行特定操作。

由于我只是在用户有适当的会话时才将支付令牌传递给用户,因此以这种方式传递令牌似乎是安全的,但我想肯定我这样做是正确的。

有人可以验证这种方法是否可行吗?

【问题讨论】:

  • 所以基本上如果我是一个“坏用户”,我可以在客户端添加付款方式吗?是否有任何数据未被处理的检查服务器端?不要觉得我对你的情况了解得不够多,无法回答。永远不要相信用户。继续偏执。刷新阅读 OWASP 网站上的一些内容。
  • @ficusr 感谢您的回复。我主要是尝试将用户现有的支付信息中继到客户端,以便可以选择一个来创建订阅。我创建订阅所需的只是支付令牌,因此将其驻留在客户端上是否可行似乎值得怀疑。
  • 如果不良用户将fake token 发送回服务器,它将失败,因为您的网络服务器会将令牌传递给braintree 服务器。此外,我们可以随时检查令牌在服务器端是否有效。 OP方法是正确的。

标签: braintree braintree-data


【解决方案1】:

在我看来 1) 这是很多不必要的工作,并且 2) 并不是你真正应该做的......

您应该传递付款随机数 - SDK 为您完成所有其他工作 - https://developers.braintreepayments.com/start/overview

具体而言,对于订阅流程,请参阅https://developers.braintreepayments.com/guides/recurring-billing/create/node - 您需要 paymentMethodToken,它来自 nonce(来自客户端或存储在您的服务器上)和一个在控制面板中设置的 planID。 paymentMethodToken 不会被传递,它是在服务器端创建的(并且可以/应该存储)。

【讨论】:

  • 但是付款随机数是一次性的,对吧?所以我不能真正将它存储在我的数据库中或将来检索它。
  • 如果我先做gateway.customer.find(userId),然后再做customer.payment_methods,那么我就有payment_tokens,braintree 正在为我做这一切。我想我要问的是,将这些信息传递给客户以便客户选择使用哪种付款方式的正确方法是什么?
  • 再次,我将向您推荐braintreepayments 文档-这在很大程度上取决于您使用的客户端和服务器(您说的是node.js-那些文档也在那里)-客户端的东西位于developers.braintreepayments.com/start/hello-client/android/…(在页面顶部选择您使用的客户端)。按照所有文档,我找不到任何地方说你应该传递 payment_tokens - 只有客户端令牌和随机数(即使你可以通过对象获得它......)。按照他们显示的流程进行操作 - 每次都对我有用。
  • 我实际上只是给支持人员发了电子邮件,他们确认 payment_token 不是安全数据,因此您实际上可以将其传递给客户。
  • 在这种情况下您不应该使用Payment Method NoncePayment Method Nonce 仅适用于 3D 安全指南。该文件还建议您使用Payment Method Token
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2016-03-16
  • 1970-01-01
  • 2017-09-15
相关资源
最近更新 更多