虽然用户输入消毒/验证是一个老生常谈的话题,但我在特定情况下发布了一个说明。
的一段代码包含
$haystack=$_GET['user'];
$输入从不用于“回响”或“打印”或以任何SQL查询或任何这样的事情。用户输入($ haystack)的唯一用途是检查字符串是否包含预定义的$针。
if (preg_match($needle,$haystack)) {
$result="A";
} else {
$result="B";
}
我的担心是恶意代码的执行,而不是它在用户输入中的存在。
所以问题是,如果用户输入仅用于上面提到的上下文(在回声,打印,SQL等没有用处),是否仍然有可能在用户输入执行恶意代码。
我想添加上下文所需的安全措施,而不是过度使用它。
我认为没有问题,但是最大的问题是如果你忘记了哪个变量被消毒了。或者如果其他程序员认为它已经过消毒。我知道这是一种很好的工作方式(忘记没有检查,但可能发生),更好地做一个功能来消毒,你可以很容易地将其应用于任何输入。或者把你的清理过的变量放在明确标记的变量名称中,例如$ clean_xxx –
可能重复[在PHP中直接使用超级全局变量是好还是坏?](http://stackoverflow.com/questions/3498207/is-using-superglobals-directly -good-or-bad-in-php) – vaxquis