使用 Google Pay JavaScript API 时防止客户端篡改

Prevent client-side tampering when using Google Pay JavaScript API

我正在尝试使用 Google Pay API 将 Google Pay 集成到我们的在线商店中,并且在教程中,有这个代码段设置了要支付的金额,以及货币代码 JavaScript 像这样的对象:

paymentDataRequest.transactionInfo = {
  totalPriceStatus: 'FINAL',
  totalPrice: '123.45',
  currencyCode: 'USD'
};

这看起来非常不安全,因为任何人都可以在最终单击 "Buy With Google Pay" 按钮之前篡改客户端的值。

当然,我也可以检查最终从支付网关发回的值,然后将订单标记为欺诈,但如果可能的话,我也想尽早防止这种情况发生..

谢谢。

I can also check that values eventually sent back from the payment gateway

这是唯一可行的方法。

I'd also like to prevent this as early into the process as I can, if possible.

这是不可能的。客户端属于访问者,最终完全在他们的控制之下。

您可以通过混淆使其变得更难,但这会使您的代码更难调试,并且不会阻止某些人只查看最终的 HTTP 请求并在根本不使用您的代码的情况下重新创建它们。

写入设备的任何数据都会被读取。在技​​术意义上提到 secret 时,这一原则在 user-facing 设备上更为突出,因为与充当服务器的机器相比,这些设备通常更容易暴露给其他代理人和个人。

您传递给 loadPaymentData 的交易信息永远不会决定最终收取的金额。你从这个电话中得到的是一种支付方式,它用只有你的处理者拥有的密钥加密,因此,支付处理者(在服务器端)是唯一可以访问此信息的代理。发出收费的最终请求继续通过您的服务器和处理器之间的安全调用发生。

本质上,使用 Google Pay 检索付款信息以发出费用等同于没有 Google Pay 的方式,除了付款信息永远不会暴露在客户端上端(因为用户不需要输入),因此,该过程在这方面具有额外的安全层。