恶意黑客可以修改隐藏的Post变量吗?


Could a Malicious Hacker Alter a Hidden Post Variable

我知道可以根据原始域欺骗POST,但是能够更改HTML中隐藏的POST变量的变量呢?我担心有人会改变我的PayPal表单中的"金额"值:

<input type="hidden" name="amount" value="1.00">

:

<input type="hidden" name="amount" value="0.01">

或类似的东西。谢谢。

是的,任何人都很容易修改表单变量。它们是GET还是POST根本不重要。

Web安全规则#1:永远不要相信任何用户输入。也声明为"所有用户都是恶意黑客"或其变体。

对注释的回答:解决方案是知道服务器端的所有正确值,而不必通过客户端(Javascript)传递它们。不管表格上写的是什么,你已经知道价格了。只需使用与最初填充表单时相同的值即可。

更新2020:

OWASP在"注入理论"中涵盖了这个主题,其中应用程序接受来自不受信任的、不受控制的或可能受到损害的来源的数据。

注入是攻击者试图将数据发送到应用程序,从而改变发送给解释器的命令的含义。

复习这个OWASP小抄;可以实现的缓解措施的概述,以更好地保护基于REST的端点。


是的,使用浏览器检查器工具,JavaScript, cURL和其他工具非常简单。


您不应该依赖amount字段作为您最初在响应中传输给客户端的内容。更安全的方法是依赖商品的标识符,您可以将其映射到服务器上的价格(一个更受控制的环境)。

是的,可以使用javascript更改该值。如果你没有练习过使用javascript,你也可以使用Google Chrome的开发者工具来做测试。

事实上,这也是不依赖于用户输入的主要原因之一。

忘掉javascript和浏览器工具吧。请认识到,我可以发送任何cookie, POST和GET参数(键和值对)我想要的,不管这是否是一个形式。(见cURL)

Frank说:"在商店里,你很少会看到顾客装满购物车,然后告诉收银员他们要付多少钱。"

试着这样想吧。浏览器(不是用户)是客户端,服务器是出纳。从浏览器流向服务器的任何信息都可以是我想要的。

是。更糟糕的是,他们甚至不需要修改你的页面。用户可以使用任何文本编辑器构建一个包含文本框的html页面,从本地磁盘加载它,填充他们想要的内容,然后点击提交。噢,这将显示在一些报头值中。

或者,如果他们真的确定,可以通过telnet连接到服务器的80端口,并伪造整个HTTP请求,包括头。

没有一个可以信任的传入请求的字节。

也就是说,这些问题有已知的解决方案,通常是通过哈希、签名和密码学来实现的,但我所知道的还不足以建议在哪里寻找它们。

在这种情况下让他们改变值,如果他们想,让他们支付你0.01美元。但是,当你收到Paypal IPN(即时支付通知)时,它将包含他们支付的价格;核对你的商品数据库,以确保它是正确的价格。

如果不是正确的价格,不要发送/赠送物品。你赚了0.01美元!