在Apache安装的什么条件下是AddHandler应用程序/ x-httpd-php .php所需的?

我是一名安全研究人员,已经遇到多种情况,可以利用这些file upload表单,允许攻击者控制的PHP代码被服务器parsing,从而导致远程执行代码。 此漏洞的根本原因似乎是默认情况下在以下Linux Distros的Apacheconfiguration中启用的传统设置:

  • CentOS 5.8
  • CentOS 6.5
  • RedHat 5.10
  • RedHat 6.5

可能还有其他的。 设置是:

AddHandler application/x-httpd-php .php 

这个设置的效果是告诉服务器名称与\ .php匹配的文件应该被解释为PHP代码。 如果攻击者上传一个名为shell.php.jpg的图像,并在其中embeddedphp代码,并导航到该页面,则服务器将以服务器用户的身份执行该脚本。

我build议的补救措施是通过发表评论来禁用此设置。 我的推理是.php文件已经有一个隐含的处理程序内置到Apache,它告诉服务器解释代码为PHP,所以这个设置在我看来是多余的。 我觉得这是旧版本的CentOS和RedHat所带来的遗留设置,最新版本没有这个设置。

我的问题是: 什么情况下会禁用此设置中断function?

我的推理是.php文件已经有一个隐含的处理程序内置到Apache,它告诉服务器解释代码为PHP

据我所知,没有隐式处理程序,这个AddHandler命令是告诉Apache传递文件的扩展名为.phpapplication/x-httpd-php处理程序(mod_php)

但是,总的来说你是正确的。 它显然是mod_mime一个鲜为人知的特性,即带有多个扩展名的文件的所有扩展都被处理程序和其他信息所检查。 Apache的文档build议该指令应该replace为:

 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> 

只传递以.php结尾的.php到该处理程序。

但最好的解决scheme是在DocumentRoot之外存储不可信任的用户上传文件,浏览器无法请求script.php.jpg (或者将链接邮寄到http://www.example.com/uploads/thisisreallyyourbank.html