为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2022-11-27 17:19:54
我正在使用 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 假装已经付款?
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

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

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

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

您的服务器上需要两条相应的路线,一条用于“创建订单”,一条用于“捕获订单”。您可以使用其中一个Checkout-lanuagename-SDK(编辑:虽然这些现在已被弃用)用于路由对 PayPal 的 API 调用,或者您自己的 HTTPS 实现,首先获取访问令牌然后进行调用(有一个完整的堆栈主要 PayPal Checkout 指南中的 node.js 中的示例,但它可以使用任何后端服务器语言来完成)。

这两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该验证金额是否正确并将其生成的付款详细信息存储在您的数据库中(特别purchase_units[0].payments.captures[0].id是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或在将返回的 JSON 转发给前端调用者之前立即保留产品) 。如果发生错误,也转发它的 JSON 详细信息,因为前端必须处理此类情况。


查看完整回答
反对 回复 2022-11-27
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

对不起,但这对我来说似乎仍然很不安全。一旦您在 paypal javascript 标签中提供了您的客户端 ID,那么任何优秀的黑客都可以在 Google 或 Firefox 等中使用 devtools,并将您的 paypal.buttons 代码替换为他们自己的 paypal.buttons 代码,然后愉快地将交易发送到 paypal无需使用您的客户端代码或服务器代码。

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

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


查看完整回答
反对 回复 2022-11-27
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信