我发布它是为了在特定情况下进行澄清,尽管用户输入清理/验证是陈词滥调。
代码的一部分包含
$haystack=$_GET['user'];
$ input永远不会用于'echo'或'print'或任何SQL查询或任何此类事物。用户输入($ haystack)的唯一进一步用途是检查字符串是否包含预定义的$ needle。
if (preg_match($needle,$haystack)) {
$result="A";
} else {
$result="B";
}
我担心的是恶意代码的执行,而不是用户输入中存在的恶意代码。
所以问题是,如果用户输入仅在上面提到的上下文中使用(在echo,print,SQL等中没有用),是否仍有可能在用户输入中执行恶意代码。
我想添加上下文所需的安全措施,而不是过度使用它。
答案 0 :(得分:3)
如果仅在上下文中使用,则无法从用户输入执行恶意代码。
您应该注意eval
,preg_replace
(使用修饰符e
,感谢 Pelshoff ),数据库查询和echo
(& print
,sprintf
...)。
答案 1 :(得分:0)
通过能够改变字符串,不可能只执行任意代码。只有当你直接输出字符串或在SQL中使用它时,你真的很担心。
答案 2 :(得分:0)
preg_match
不会最终执行您的输入。有一个隐藏的可利用漏洞太简单直接了。如果您在运行$haystack
之后抛出preg_match
,那么它就不会对您造成伤害。
答案 3 :(得分:0)
虽然可能无法反映$haystack
,但它显然会影响程序流程。您发布的(极短)代码当然不会直接受到攻击,但不清理您的输入可能会导致代码执行与其他漏洞一起使用。