如果您发布一个带有名称以 [] 结尾的输入的 html 表单,php 会自动将这些 $_POST 值放入一个数组中。
例如,没有括号:
<input name="email" value="a" />
var_dump($_POST["email"])
//string 'a' (length=1)
带括号:
<input name="email[]" value="a" />
<input name="email[]" value="b" />
var_dump($_POST["email"])
//array
// 0 => string 'a' (length=1)
// 1 => string 'b' (length=1)
我的问题是,以前我不知道这一点,所以我一直在编写我的网站,假设 $_POST 变量始终是字符串类型。自然地,我执行标准输入验证,但只假设变量已经是字符串。
那么,如果黑客接受了我的一个正常输入,例如<input name="email" .../>
,然后用括号将其发布,该怎么办。然后我获取 $_POST["email"] 的代码将是一个数组!
我可以想象在某些情况下这将是一个安全问题,例如,startWith-function 可以在字符串和数组上工作。我还没有研究它的全部含义,我也不想,我只想完全禁用该功能,这样我就可以相信所有 $_POST 变量始终是字符串。
有什么方法可以全局禁用此功能,或者是查找-替换所有并在 $_POST 的每次访问前添加(字符串)-cast 的唯一选项?