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