PHP中的$ _GET ['用户']安全漏洞

时间:2011-08-10 08:55:31

标签: php security xss

我发布它是为了在特定情况下进行澄清,尽管用户输入清理/验证是陈词滥调。

代码的一部分包含

$haystack=$_GET['user'];

$ input永远不会用于'echo'或'print'或任何SQL查询或任何此类事物。用户输入($ haystack)的唯一进一步用途是检查字符串是否包含预定义的$ needle。

if (preg_match($needle,$haystack)) {
$result="A";
} else {
$result="B";
}

我担心的是恶意代码的执行,而不是用户输入中存在的恶意代码。

所以问题是,如果用户输入仅在上面提到的上下文中使用(在echo,print,SQL等中没有用),是否仍有可能在用户输入中执行恶意代码。

我想添加上下文所需的安全措施,而不是过度使用它。

4 个答案:

答案 0 :(得分:3)

如果仅在上下文中使用,则无法从用户输入执行恶意代码。

您应该注意evalpreg_replace(使用修饰符e,感谢 Pelshoff ),数据库查询和echo(& printsprintf ...)。

答案 1 :(得分:0)

通过能够改变字符串,不可能只执行任意代码。只有当你直接输出字符串或在SQL中使用它时,你真的很担心。

答案 2 :(得分:0)

preg_match不会最终执行您的输入。有一个隐藏的可利用漏洞太简单直接了。如果您在运行$haystack之后抛出preg_match,那么它就不会对您造成伤害。

答案 3 :(得分:0)

虽然可能无法反映$haystack,但它显然会影响程序流程。您发布的(极短)代码当然不会直接受到攻击,但不清理您的输入可能会导致代码执行与其他漏洞一起使用。