论坛输入元素中的数组值


Array value from a forum input element

我的印象是,插入到<输入类型 名称="某物">中的内容都会在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>

我称之为"黑客",因为:

  1. 如果您使用其他PHP功能"字符串是字节数组",那么有人可以将修改后的数据发送到脚本中,例如$x = "abc"; $a = $x[0]; echo $a; -> 'a'

  2. 如果你把输入[form]的数据放在SQL查询中而不进行验证,黑客可以使用它来制作"无效的查询格式",在某些情况下,它可以让他从数据库中获取一些信息!