繁体   English   中英

PayPal 结帐:仅使用客户端代码接收付款是否安全?

[英]PayPal Checkout: Is it safe to receive a payment with only client-side code?

我正在使用 PayPal API 将付款选项放到我的网站上。 在他们拥有的教程中,他们使用 JavaScript 在客户端完全呈现按钮并设置事务。 这是示例代码:

<script>
  paypal.Buttons({
    createOrder: function(data, actions) {
      // This function sets up the details of the transaction, including the amount and line item details.
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: '0.01'
          }
        }]
      });
    },
    onApprove: function(data, actions) {
      // This function captures the funds from the transaction.
      return actions.order.capture().then(function(details) {
        // This function shows a transaction success message to your buyer.
        alert('Transaction completed by ' + details.payer.name.given_name);
      });
    }
  }).render('#paypal-button-container');
  //This function displays Smart Payment Buttons on your web page.
</script>

这安全吗?

用户只需在自己的代码中更改支付金额并减少支付。 即使我设置客户端代码在交易成功后发送交易 ID(即在 onApprove 发出 POST 请求),以便我可以让服务器端代码检查发送的金额是否正确,客户端仍然可以更改他这边的代码以发送虚假的交易ID。

在交付产品之前,我基本上需要一种机制来检查我是否确实收到了正确的金额。 我显然需要在服务器端进行此检查,但我无法找到一种安全的方法来做到这一点,因为我需要从客户端获取一些可能是假的信息。 如何防止用户通过发送过去的交易 ID 来假装已付款?

您是正确的,用户始终可以更改客户端代码中的金额,并以较低的金额发送付款。 这就是客户端支付的工作方式。

跟踪哪些支付是真实的以及正确金额的任何逻辑都必须在您的服务器上。

对于 PayPal Checkout,这是您应该使用的前端 UI: https://developer.paypal.com/demo/checkout/#/pattern/server

您的服务器上需要两条对应的路由,一条用于“创建订单”,一条用于“捕获订单”。 您可以使用Checkout-lanuagename-SDK中的一个用于路由对 PayPal 的 API 调用,或者您自己的 HTTPS 实现首先获得访问权令牌。 这两条路线都应仅返回 JSON 数据(无 HTML 或文本)。 在第二条路线中,当捕获 API 成功时,您应该验证金额是否正确并将其生成的付款详细信息存储在您的数据库中(特别是purchase_units[0].payments.captures[0].id ,即 PayPal 交易 ID)并在将您的退货 JSON 转发给前端调用者之前立即执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)。 如果发生错误,请转发 JSON 的详细信息,因为前端必须处理这种情况。

对不起,但这一切对我来说似乎仍然很不安全。 Once you have given your client-ID in the paypal javascript tag, then any good hacker can use devtools in Google or Firefox, etc. and replace your paypal.buttons code with their own paypal.buttons code and happily send the transaction along to paypal不使用您的客户端代码或服务器代码。

我对这个理论进行了一些测试,在五分钟或更短的时间内,我能够重做客户端 javascript 中的代码,并为我购买的产品支付任何我想要的费用(这是在测试环境中)。

我在这里缺少什么不会使客户端代码完全不安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM