用PHP代码注入

时间:2011-03-16 16:34:23

标签: php code-injection

我知道如何防止SQL注入&东西&验证用户输入...但是想知道你是否从用户输入字段中获取数据&数据是一个字符串,这些数据在代码中使用的安全性如下:

if ($i == $_POST['userinput']) {
    ....
}

以上只是一个例子,试图回答我的问题,询问你需要采取什么步骤&在什么情况下。

显然它不会在上面的例子中起作用,只是试图阻止人们做像include('whatever.php')这样的事情;等

5 个答案:

答案 0 :(得分:4)

与你所展示的变量进行比较本身并不危险,所以没有什么可担心的。

使用,在include语句,数据库查询,文件名,eval()调用,HTML页面等中时,用户输入都会变得有危险。其中一种用途具有 一个 正确的卫生方法。

答案 1 :(得分:1)

与用户提供的变量相比较好,它们只是作为字符串处理。关于您的include('whatever.php')示例,请使用白名单来防止它:

if(!in_array($userinput, array('libs.php', 'my.php'))) {
  die('sorry pal');
}

答案 2 :(得分:1)

除非您从eval这样的字符串调用{strong>创建并运行实际PHP代码的create_function或类似函数,否则通常无需担心实际代码注射。

正如您已经指出的那样,在直接根据用户输入执行包含或调用函数时,您需要小心。事实上,你知道这意味着你可能已经做好了充分的准备。

答案 3 :(得分:1)

来自用户的数据可能是危险的,但这并不意味着始终是危险的 - 这取决于您使用它做什么。

虽然过滤/白名单/清理数据总是很好的做法,但您必须做的绝对最低限度是避免直接使用它来做与环境主动交互的事情:处理文件系统(include,fopen,file_(get | put) )_contents等),数据库,生成HTML输出等。

当然,不同的情况需要采取不同的措施:例如,在构建数据库查询时使用(我经常看到)htmlspecialchars()是没有意义的 - 该函数的目的是避免在浏览器输出中注入代码,所以应该用它。

简而言之,没有神奇的一句话答案,你必须知道什么是危险的,什么时候,并采取相应的行动。

答案 4 :(得分:-1)

作为一个字符串本身,它很好。对addslashes来说更安全,以确保'"之类的符号不会发生冲突。这主要是对SQL数据库的危险。