我正在构建一个Web应用程序,我担心安全问题。
是否可以进行“php注入”,就像可以进行“SQL注入”一样?这意味着客户端可以发送一些将在服务器上执行的PHP代码。
在我们不使用“eval”函数之前,我想说“不”,因为当我们通过$ _GET和$ _POST得到一个值时,所有数据都被视为简单的字符串...但也许我没有看到明显的攻击。</ p>
答案 0 :(得分:2)
一般情况下,除非您使用可能解析并执行PHP的内容对其进行评估。您已经提到了eval,但是还有其他函数具有类似eval的属性(例如preg_replace
,如果攻击者设法注入/e
修饰符)或者可以允许不需要的访问级别(例如{{ 1}})。
此外,如果攻击者可以上传文件并将其解释为PHP,则可以运行PHP代码。 nginx可以是允许攻击者在图像文件中执行PHP代码的方式easily misconfigured。将您的网站设置为system()
代码也是如此 - 可能是通过上传覆盖您的文件,或将include()
参数更改为指向远程站点(如果未在php中禁用)。 INI)。
答案 1 :(得分:1)
有许多方法可以使用#34; PHP注入&#34;。 eval
就是其中之一。 shell_exec
和相关函数也是一种风险(总是使用escapeshellarg
!)但常见的主题是将用户输入放在可以执行的地方。这是SQL注入的情况,其中查询是包含用户输入的字符串,然后在MySQL服务器上执行。
一个稍微模糊的例子是文件上传。如果您允许将文件上传到服务器,请不要允许不受限制地访问它们!有人可以上传一个PHP文件,然后访问它并完全控制你的网站,所以...是的,小心上传!
答案 2 :(得分:0)
如果PHP脚本“使用来自上游组件的外部影响的输入构造全部或部分代码段,您将其称为PHP注入,但它不会中和或错误地中和可能修改语法或行为的特殊元素预期的代码段“ [1] 。
因此,对于PHP作为处理器,任何函数(其参数被直接或间接地解释为PHP)都可能易于注入PHP。这显然包括eval
function,但也包括create_function
和preg_replace
with PREG_REPLACE_EVAL modifier等功能。
此外,这还包括生成PHP代码以在应用程序设置期间写入文件(如配置文件)的例程。或者通过php -r …
执行PHP的例程,即使通过escapeshellarg
进行转义。
查看observed examples for CWE-94: Improper Control of Generation of Code ('Code Injection')。