.htaccess 在一个目录中禁用PHP执行

3wabscal  于 2022-11-16  发布在  PHP
关注(0)|答案(4)|浏览(136)

为了防止PHP本地文件包含攻击,我想完全禁止执行一个目录中的所有PHP文件。在.htcaccess文件中使用php_flag engine off行将导致500错误。根据another question,这是由于PHP的安装方式。
如果PHP安装无法更改,是否有其他方法可以阻止PHP执行?
更新:文件不一定以.php结尾。

o4hqfura

o4hqfura1#

将其添加到.htaccess文件

<FilesMatch \.php$>
    SetHandler None
</FilesMatch>
hs1ihplo

hs1ihplo2#

你正在通过“允许所有,然后拒绝”的逻辑来构建你的站点。你应该用“拒绝所有,然后允许”的逻辑来构建它。例如,你告诉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,这正是你试图阻止的。与其为你想拒绝的每一个文件添加单独的例外,不如反过来开始。也就是说,如果你有你不想被服务的文件,那么不要把它们放在文档根目录

<VirtualHost *:80>
    ServerName foo.com
    DocumentRoot "/path/to/files/public"
</VirtualHost>

注意,DocumentRoot现在被设置为项目中的一个子目录。只将您的公共资源放在这个目录中。所有其他文件都在公共目录之外(即,在公共目录之上),因此不能由Apache提供服务,同时仍然允许PHP包含它们。

/path/to/files
    config.php
/path/to/files/lib
    db.php
    etc.php
    other_thing.php
/path/to/files/public
    index.php
h7wcgrx3

h7wcgrx33#

为了保护您的网站免受后门访问文件的攻击,您需要创建一个.htaccess文件,并将其上载到您的站点所需的目录中。
创建一个名为.htaccess的空白文件,并将以下代码粘贴到该文件中。

<Files *.php>
    deny from all
    </Files>
lo8azlld

lo8azlld4#

<?php标头下添加此内容,这将阻止直接执行php

defined('BASEPATH') OR exit('No direct script access allowed');

相关问题