阻止PHP解析非PHP文件,例如someFile.php.txt

时间:2013-12-12 01:20:06

标签: php apache phpdoc

我刚刚安装了phpdocumentor,但收到了奇怪的错误。我终于找到了问题。

Phpdocumentor创建了各种文件,例如someFile.php.txt,其中包含PHP代码,但不打算进行解析。事实证明,我的服务器正在解析它们。我还测试了一个名为someFile.txt的文件名,但它没有被解析。

如何阻止我的PHP服务器解析someFile.php.txt等文件?

我的服务器是PHP版本5.4.20,Apache 2.2.15和CentOS 6.4。我的/etc/httpd/conf.d/php.conf文件如下:

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

2 个答案:

答案 0 :(得分:8)

事实证明,CentOS Apache的默认设置实际上允许这个,它是known vulnerability。要修复它,您需要编辑Apache配置设置。您的PHP设置通常位于/etc/httpd/conf.d/php.conf。默认值如下所示

AddHandler php5-script .php
AddType text/html .php

我们需要将其更改为

#AddHandler php5-script .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
AddType text/html .php

重新启动Apache,这应该是在.php

之后解析任何带扩展名的文件的结束

现在,$非常重要,因为它使用regexregex$表示“字符串结束”。这意味着文件必须以.php结束(即没有.php.txt)才能被PHP解析。

答案 1 :(得分:0)

我在CentOS 6.5上遇到同样的问题,我需要在虚拟环境中解决这个问题,我无法访问php.conf

我在.htaccess文件中使用了以下内容。

# Match anything that ends with .php.txt
<FilesMatch \.php\.txt$>
    RemoveHandler .php
    ForceType text/plain
</FilesMatch>

我不允许用户上传,因此我并不担心任何安全隐患。我只是想让.php.txt扩展工作。这就行了。