Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP代码注入_Php_Code Injection - Fatal编程技术网

PHP代码注入

PHP代码注入,php,code-injection,Php,Code Injection,我知道如何防止SQL注入、填充和验证用户输入。。。但是我想知道是否从用户输入字段中获取数据&数据是一个字符串在代码中使用这些数据有多安全,比如: if ($i == $_POST['userinput']) { .... } 以上只是一个例子,我想问你在什么情况下需要采取什么样的步骤 显然,它在上面的实例中不起作用,只是试图阻止人们做一些像include('whater.php')这样的事情;等等。作为字符串本身是可以的。添加斜杠更安全,以确保像'和“这样的符号不会冲突。这主要是对SQ

我知道如何防止SQL注入、填充和验证用户输入。。。但是我想知道是否从用户输入字段中获取数据&数据是一个字符串在代码中使用这些数据有多安全,比如:

if ($i == $_POST['userinput']) {
    ....
}
以上只是一个例子,我想问你在什么情况下需要采取什么样的步骤


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

作为字符串本身是可以的。添加斜杠更安全,以确保像
'
这样的符号不会冲突。这主要是对SQL数据库的一种危险。

对变量进行比较,正如您所展示的,本身并不危险,因此无需担心


当在include语句、数据库查询、文件名或
eval()中使用用户输入时,会有潜在的危险
调用,在HTML页面中,等等。每种用法都有一种正确的方法。

与用户提供的变量相比,它们只是作为字符串处理。关于
include('whater.php')
示例,请使用白名单进行保护:

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

除非您正在调用
eval
或类似的函数,从
create\u function
这样的字符串创建并运行实际的PHP代码,否则您通常不需要担心实际的代码注入

正如您已经指出的,在直接基于用户输入执行include或调用函数时,确实需要小心。您知道这一点,这意味着您可能已经在这方面做好了充分的准备。

来自用户的数据具有潜在的危险性,但这并不意味着它总是危险的——这取决于什么你用它干什么

虽然过滤/白名单/清理数据始终是一种良好的做法,但您必须避免直接使用它来做与环境积极交互的事情:处理文件系统(包括、fopen、文件(get | put)内容等)、数据库、生成HTML输出等等

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


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

请不要建议使用
addslashes
!addslashes本身并没有任何安全性。
addslashes()
相当于在你的车上用煮熟的意大利面条作为安全带。谢谢……我想是的,只是想确定一下:)