为了防止PHP本地文件包含攻击,我想完全禁用一个目录中所有PHP文件的执行。使用.HTCACCESS文件中的LINE php_flag engine off
将导致500错误。根据另一个问题,这是由于安装PHP的方式。
如果无法更改PHP,是否有其他方法可以防止PHP执行?
更新:这些文件没有必要的.php结尾。
将其添加到您的.htaccess
文件
<FilesMatch .php$>
SetHandler None
</FilesMatch>
您是通过"允许全部构建网站,然后拒绝"逻辑。您应该使用"全部拒绝,然后允许"逻辑构建它。例如,您告诉Apache将所有文件提供一个特定的目录,然后覆盖该配置,以告诉Apache不要在该目录中提供某些文件。即,您可能有类似的东西:
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files"
</VirtualHost>
具有这样的目录布局:
/path/to/files
index.php
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
使用此设置,任何人都可以直接请求http://foo.com/config.php
或http://foo.com/lib/etc.php
,这是您要预防的。与其添加您想要否认的所有事物的单独例外,不如说。即,如果您有不想提供的文件,则不要将它们放入文档root 。
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files/public"
</VirtualHost>
请注意,该文档Root现在设置为项目中的子目录。仅将您的公共资产放在此目录中。所有其他文件都在外面(即上述(公开,因此无法由Apache提供,同时仍允许PHP包括它们。
/path/to/files
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
/path/to/files/public
index.php
要保护您的网站免受后门访问文件,您需要创建一个.htaccess文件并将其上传到您网站的所需目录。
创建一个名为.htaccess的空白文件并粘贴其中的以下代码。
<Files *.php>
deny from all
</Files>
在<?php
标头下方添加它,这将防止直接执行php
defined('BASEPATH') OR exit('No direct script access allowed');