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

Posted

技术标签:

【中文标题】使用 Google Pay JavaScript API 时防止客户端篡改【英文标题】:Prevent client-side tampering when using Google Pay JavaScript API 【发布时间】:2019-06-16 16:03:59 【问题描述】:

我正在尝试使用 Google Pay API 将 Google Pay 集成到我们的在线商店中,在教程中,有这个设置支付金额的 sn-p 和 javascript 对象中的货币代码,如下所示:

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

这看起来非常不安全,因为任何人都可以在最终点击“使用 Google Pay 购买”按钮之前篡改客户端的值。

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

谢谢。

【问题讨论】:

***.com/questions/3727332/… ***.com/questions/10494952/… ***.com/questions/46675099/… ***.com/questions/22208349/… 【参考方案1】:

我还可以检查最终从支付网关发回的值

这是唯一可行的方法。

如果可能的话,我还想尽早避免这种情况发生。

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

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

【讨论】:

【参考方案2】:

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

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

本质上,使用 Google Pay 检索付款信息以进行收费与不使用 Google Pay 的方式相同,只是付款信息永远不会在客户端公开(因为用户无需键入它进入),因此,该过程在这方面具有额外的安全层。

【讨论】:

以上是关于使用 Google Pay JavaScript API 时防止客户端篡改的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Google / Android Pay 以外的支付平台(订阅)?

是否可以用 Google Pay 替换 Google Play IAB?

应用因 Google Pay 而被拒绝

Google Pay API:Braintree 网关配置

Laravel 中的 Google Pay 或 Phone Pay 或 Paytm UPI API 支付

如何使用 Google Pay 为我的在线服务自动收费