防止 PHP/JavaScript/JQuery (PayPal) 中的表单操纵

Prevent form manipulation in PHP/JavaScript/JQuery (PayPal)

我有一个表单,用户可以在其中使用 PayPal 或银行转账作为付款方式购买积分。

如果用户选择 "PayPal" 作为选项,表单数据将发送到 PayPal,使用 JQuery/JS:

$(':radio').change(function () {
var $this = $(this).val();
    if ($this === 'pp') {
    $('#form').attr('action','https://www.paypal.com/cgi-bin/webscr');  
     }           
    else
    {
    $('#form').attr('action','');  
    }
});

用户还可以选择他想支付多少,这也选择了他将从中获得多少积分。此外,他还可以添加优惠券代码。 Ajax-请求将检查我们的数据库,如果这是有效的优惠券并授予折扣值。

所有信息都存储在隐藏的输入字段中(价格是多少、积分多少、折扣多少(如果有)、用户 ID 等)。 现在,我想确保用户不会使用开发人员工具或类似的东西来操纵这些值以减少支付、使用另一个用户 ID 等等。

防止此表单操纵并接收正确数据的最佳方法是什么?我认为这有点困难,因为要更改的值太多了。

数据伪造/操纵

有许多恶意的方法可以将操纵或伪造的数据发送到 Web 服务器 - cURL、Http 客户端(OSX 应用程序)仅举两个我在调试时经常使用的方法。无论您怎么想 Javascript,坚定的攻击者都会向 HTTP 服务器发送错误数据。

跳出框框思考

出于安全需要,是时候打破使用 Web 浏览器的思维模式了,因为它是一个网站。如前所述,有多种方法可以将数据发送到 HTTP 服务器。

Javascript 有利于 UI 并帮助用户,但在保护您的服务免受故意 bad/wrong/malformed 数据的侵害时,您 必须 在服务器上执行此操作。

您的具体问题

您可能需要重新考虑使用隐藏的表单域。一种方法是使用会话来跟踪此信息。如果这是必须以其形式发送到 PayPal 的信息,则有一种方法可以 embed the PayPal form 使用加密数据。

如果您不想这样做,那么安全点就会转移到订单处理代码——在考虑交易完成和有效之前查看交易细节(货币金额等)。