0

嗨,我目前正在尝试将 worldpays 支付网关集成到网站。

但是,我似乎无法以安全的方式提交表单。

这是一个示例表单:

<form method="POST" name="BuyForm" action="https://secure- test.worldpay.com/wcc/purchase">
<input type="hidden" value="yourinstid" name="instId">
<input type="hidden" value="yourcartid" name="cartId">
<input type="hidden" value="GBP" name="currency">
<input type="hidden" value="100" name="amount">
<input type="hidden" value="Product 1" name="desc">
<input type="hidden" value="100" name="testMode">
<input type=submit value="Buy Now">    
</form>

无论如何在 php 中提交此内容以阻止最终用户能够检查和更改金额,即将金额从 100.00 英镑更改为 1.00 英镑并提交订单并为价值 100 英镑的商品支付 1 英镑?

我试过 curl 但是从我读到的你不能将用户重定向到你提交数据的页面?

在此先感谢,乔丹

4

1 回答 1

1

使用您拥有的架构,不。因为用户直接从页面发送数据到 worldpay.com 而没有首先通过您的服务器,所以您不能阻止用户检查将要发送的内容或更改值。即使您使用 javascript 锁定了浏览器,有什么能阻止我加载页面,然后复制信息并使用命令行中的 cURL 请求将其直接发送到 worldpay?这对你来说是一场失败的战斗。

查看 WorldPay 文档以了解如何安全地提交转账。支付系统通常可以解决这个问题。这是我见过的一些技术。

  • 我注意到有一个购物车 ID。可能有一个 API,您的服务器首先向 worldpay 发送请求以创建购物车或支付请求并获取一些令牌。然后,用户必须连同表单一起提交一个有效的令牌。这将允许 worldpay 将用于创建令牌的数据与表单提交进行比较,并注意任何更改。

  • 其他支付服务要求您使用从商家帐户获得的秘密令牌签署任何提交。基本上,签名是所有表单值的键控散列(用秘密键控,从不发送到浏览器)。如果客户更改表单并提交更改,则新表单输入将与签名不匹配。

  • 其他支付服务允许您Pay从商家帐户中创建安全按钮。这是对每种产品成本的预先约定。然后在浏览器中,您甚至不需要设置金额、产品 ID 等...只需Pay创建按钮 ID。

  • 最后,最简单的检查是在为用户创建表单之前在服务器上创建交易记录。一旦您收到付款通知,请在您的记录中查找付款或交易 ID,并确保在处理订单之前排列整齐。

底线是:您无法阻止用户更改她直接提交给 worldpay 的内容,因此如果您的安全性有此要求,它将失败。对 worldpay 安全支付流程进行研究。

于 2017-07-23T13:51:21.747 回答