Worldpay 支付网关 - 让提交更安全

Worldpay Payment Gateway - Make submission more secure

您好,我目前正在尝试将 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,但是根据我的阅读,您无法将用户重定向到您已将数据提交到的页面?

提前致谢, 约旦

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

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

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

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

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

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

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