恶意黑客可能会改变一个隐藏的后变量

Vla*_*lad 36 html php validation post

我知道POST可以在起源域方面被欺骗,但是能够在我的HTML中更改隐藏的POST变量的变量呢?我担心有人可能会改变我的PayPal表单中的"金额"值:

<input type="hidden" name="amount" value="1.00">
Run Code Online (Sandbox Code Playgroud)

对此:

<input type="hidden" name="amount" value="0.01">
Run Code Online (Sandbox Code Playgroud)

或类似的东西.谢谢.

Tes*_*rex 74

是的,任何人都可以轻松修改表单变量.无论是GET还是POST都没关系.

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

回答评论:解决方案是知道服务器端的所有正确值,而不必通过客户端(Javascript)传递它们.因此无论表格形式如何,您都已知道价格.只需使用您用于填充表单的相同值.

  • 强调*琐碎* (32认同)
  • 理想情况下,您不会将金额视为任何类型的输入.你会得到一个项目列表,你会计算你的PHP脚本中的金额.在商店,你很少会看到客户填满他们的购物车,然后告诉收银员他们需要付多少钱. (11认同)
  • @Vlad为什么你需要用户传回他/她不允许使用的东西?您是否可以只存储该信息服务器端,或者如果您必须将其发送给用户,请对数据进行签名以便检查它是否已被篡改? (7认同)
  • 该Web安全规则的+1.永远不要(完全)信任来自客户端的任何输入.这可能包括_encrypted cookies_.所有输入都必须经过全面检查和验证,每次收到时都要收到.永远不要存储除某种id/session令牌客户端之外的任何东西(必须仍然有效).请注意,如果某些"恶意"用户的计算机是僵尸网络的一部分,他们可能不会故意这样做. (6认同)

xan*_*ded 13

是的,使用浏览器检查器工具和JavaScript非常简单.


您不应该依赖于amount您在响应客户端时最初传输的字段.更安全的方法是依赖项目的标识符,您可以将其映射到服务器上的价格(更受控制的环境).


Aur*_*osa 7

是的,可以使用javascript更改该值.如果您还没有练习使用javascript,也可以使用Google Chrome的开发人员工具进行测试.

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


use*_*723 7

忘记javascript和浏览器工具.请注意我可以发送任何我想要的cookie,POST和GET参数(键和值对),无论这是否是它们的形式.(见cURL)

弗兰克说:"在商店,你很少会看到客户填满他们的购物车,然后告诉收银员他们需要付多少钱."

试着这样想.该浏览器(而非用户)是客户端和服务器是收银员.从浏览器流向服务器的任何信息都可以是我想要的任何信息.


BCS*_*BCS 5

是.它变得更糟,因为他们甚至不必改变你的页面来做它.用户可以使用任何文本编辑器构建一个带有文本框形式的html页面,从本地磁盘加载它,用他们想要的任何东西填充它们并点击提交.OTOH,将出现在一些标题值中.

或者,如果它们确实存在,则可以通过telnet连接到服务器上的端口80,并伪造整个HTTP请求,包括标头.

您可以信任的传入请求没有单个字节.

也就是说,这些问题的已知解决方案通常是在哈希,签名和加密方面实现的,但我不知道在哪里寻找它们.