我的印象是,插入到<输入类型 名称="某物">中的内容都会在PHP中以字符串形式接收,带有$_POST['something']。输入类型>
但是现在我正在运行一个工具来测试我的网站,不知何故 $_POST['something'] 可以是一个数组。
这怎么可能?
如果你的形式中有像<input name="something[]" ... />
这样的输入,你可以有很多输入或<select name="something[]" multiple ... />
,等等。
$_POST['something'] 将是一个数组。
这是
常见的"黑客"。您应该始终验证您获得的变量是否采用您期望的格式。$_GET 的示例:
http://127.0.0.1/hack_test.php?a[]=3&a[]=5?a[]=3&a[]=5
使用 $_GET 和数组的"键"的示例:
http://127.0.0.1/hack_test.php?a[3]=3&a[hack_name]=5
如果您输入:
<?php
var_dump($_GET);
在hack_test.php中,它将显示:
array(1) {
["a"]=>
array(2) {
[0]=>
string(1) "3"
[1]=>
string(1) "5"
}
}
变量 $_GET['a'] 是包含 2 个元素的数组!
这就像在PHP中一样,因为网站表单有时需要该功能。例:
<form ..>
<input type="checkbox" name="multicheckbox[]" value="chicken" />
<input type="checkbox" name="multicheckbox[]" value="apple" />
<input type="checkbox" name="multicheckbox[]" value="sugar" />
</form>
我称之为"黑客",因为:
如果您使用其他PHP功能"字符串是字节数组",那么有人可以将修改后的数据发送到脚本中,例如$x = "abc"; $a = $x[0]; echo $a; -> 'a'
如果你把输入[form]的数据放在SQL查询中而不进行验证,黑客可以使用它来制作"无效的查询格式",在某些情况下,它可以让他从数据库中获取一些信息!