在一个目录中禁用PHP执行



为了防止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.phphttp://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');

最新更新