我刚刚安装了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
答案 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
现在,$
非常重要,因为它使用regex
,regex
内$
表示“字符串结束”。这意味着文件必须以.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
扩展工作。这就行了。