我知道POST可以在原始域方面被欺骗,但是如果能够在我的HTML中更改隐藏的POST变量的变量呢?我担心有人可能会改变我的PayPal表单中的“金额”值:
<input type="hidden" name="amount" value="1.00">
到此:
<input type="hidden" name="amount" value="0.01">
或类似的东西。感谢。
答案 0 :(得分:74)
是的,任何人都可以轻松修改表单变量。无论是GET还是POST都没关系。
Web安全规则#1:永远不要相信任何用户输入。也称为“所有用户都是恶意黑客”或其中的一些变体。
回答评论:解决方案是知道服务器端的所有正确值,而不必通过客户端(Javascript)传递它们。因此无论表格形式如何,您都已知道价格。只需使用您用于填充表单的相同值。
答案 1 :(得分:13)
是的,使用浏览器检查工具和JavaScript非常简单。
您不应该依赖amount
字段作为客户响应中最初传输的字段。更安全的方法是依赖项目的标识符,您可以将其映射到服务器上的价格(更受控制的环境)。
答案 2 :(得分:7)
是的,可以使用javascript更改该值。如果您还没有练习使用javascript,也可以使用Google Chrome的开发人员工具进行测试。
事实上,这是不依赖用户输入的主要原因之一。
答案 3 :(得分:7)
忘记javascript和浏览器工具。 请注意我可以发送任何我想要的cookie,POST和GET参数(键和值对),无论这是否是它们的形式。 (见cURL)
弗兰克说&#34;在商店,你很少会看到客户填满他们的购物车,然后告诉收银员他们需要付多少钱。&#34;
尝试这样想。 浏览器(非用户)是客户端,服务器是收银员。 从浏览器流向服务器的任何信息都可以是我想要的任何信息。
答案 4 :(得分:5)
是。它变得更糟,因为他们甚至不必改变你的页面来做到这一点。用户可以使用任何文本编辑器构建一个带有文本框形式的html页面,从本地磁盘加载它,用他们想要的任何内容填充它们并点击提交。 OTOH,会出现在某些标题值中。
或者,如果他们确实已经确定,可以通过telnet连接到服务器上的端口80并伪造整个HTTP请求,包括标头。
您可以信任的传入请求没有一个字节。
尽管如此,已知这些问题的解决方案通常是在哈希,签名和加密方面实现的,但我不知道在哪里寻找它们。
答案 5 :(得分:-3)
在这种情况下,让他们改变价值,如果他们愿意,让他们支付0.01美元。但是,当您获得Paypal IPN(即时付款通知)时,它将包括他们支付的价格;检查项目数据库,确保它的价格正确。
如果价格不正确,请勿发送/提供该项目。你赚了0.01美元!