我们是否应该防范来自下拉列表的意外用户输入?是否有理由期望用户以某种方式修改下拉列表以包含最初未包含的值?
他们怎么能这样做,我们怎么能阻止它?
答案 0 :(得分:12)
绝对检查一下。
在接收端做类似伪代码的事情:
if { posted_value is_element_of($array_of_your_choices) }
//processing code
else {
//prompt them for good input
}
例如:您的下拉列表是原色,他们喜欢他们的房子画。你有(在PHP中)
$colors = array('red', 'blue', 'yellow');
if in_array($_POST['color'], $colors)
{ //process this code! dispatch the painters; }
else {echo "sorry, that's not a real color";}
编辑:这当然是可能的。如果您的价值是通过GET请求提交的,那么用户只需输入www.example.com/?price=0
即可获得免费住房。如果它是一个POST请求,它可能看起来有点困难,但实际上并非如此:
curl_setopt($ch, CURLOPT_POSTFIELDS,"price=0");
除了大量其他客户之外,人们可以直接使用cURL来操作POST请求。
答案 1 :(得分:3)
用户只需手写一个填写了恶意数据的HTTP请求即可。例如,对于GET请求,您可能会有一个列出阿拉巴马州,阿肯色州等的“州”下拉列表。他可以将http://example.com?state=evilstuff简单地放入浏览器网址栏。
由于您已经确切知道下拉列表中的内容,因此很容易避免这种情况。只需检查输入是否在该列表中就足以防止类似注入攻击。如果他输入的不是有效的州名,则抛出错误。
答案 2 :(得分:2)
这只能通过修改HTTP响应来完成。所以,
答案 3 :(得分:1)
当我感到无聊时,我只是为了好玩而编辑网站中的下拉列表。大多数情况下,它只是打破了网站,但至少有一次我可以通过玩网站的隐藏字段获得免费或大幅降低门票价格。 (唉,这是我工作的公司,所以我不得不报告错误。)
答案 4 :(得分:0)
是的,恶意用户可以在不使用您的表单的情况下向您的服务器提交数据,并且可以提交通常不包含在您的下拉列表中的数据。这是一种通常在现实世界中被利用的微不足道的攻击形式。
始终检查有效输入!
答案 5 :(得分:0)
其他一些答案绝对正确,您必须在服务器端验证来自用户端的任何数据。
在工作中,我们使用诸如Firefix插件篡改数据之类的工具来操作和查看在完成任何客户端(javascript)验证后发布到服务器的数据。此外,您甚至可以使用简单的工具(如Firebug)来明显地更改下拉框,以包含服务器在提交之前未放置的值。