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

Posted

技术标签:

【中文标题】防止 PHP/JavaScript/JQuery (PayPal) 中的表单操作【英文标题】:Prevent form manipulation in PHP/JavaScript/JQuery (PayPal) 【发布时间】:2015-07-19 16:57:47 【问题描述】:

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

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

$(':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-Request 将检查我们的数据库,如果这是一张有效的优惠券并授予折扣值。

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

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

【问题讨论】:

如果您不希望用户能够操作数据,那么不要将数据提供给用户 Paypal 开发人员指南概述了完成这一切的正确方法。跟随指南 始终验证服务器上的数据。浏览器不是向 HTTP 服务器发送数据的唯一方法。 那么发送 Ajax-post 会是一个不错的选择吗?因为首先计算发生在 JQuery/JS 中。 @TimG 【参考方案1】:

数据伪造/操纵

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

跳出框框思考

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

Javascript 对 UI 和帮助用户有好处,但是在保护您的服务免受故意错误/错误/格式错误的数据的影响时,您必须在服务器上执行此操作。

您的特殊问题

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

如果您不想这样做,则安全点会转移到订单处理代码 - 在考虑交易完整且有效之前查看交易详细信息(货币金额等)。

【讨论】:

非常感谢,这对我有帮助!

以上是关于防止 PHP/JavaScript/JQuery (PayPal) 中的表单操作的主要内容,如果未能解决你的问题,请参考以下文章

动态切换语言 PHP,Javascript, jQuery UI

PHP、HTML、CSS、Javascript 表单安全

如何在 PHP 中运行 ffmpeg 命令

从剪贴板上传图片到服务器

Swift 防止按钮重复点击

如何防止用户重复提交数据