Apache 阻止执行特定目录中的 PHP 文件

Apache 阻止执行特定目录中的 PHP 文件

您好,不确定这是否是正确的论坛,但我想知道如何防止在特定目录中执行某些文件类型。快速谷歌搜索表明,htaccess 文件包含...

Options -ExecCGI
php_flag engine off
SetHandler none
SetHandler default-handler
RemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo

应该可以解决问题。我想知道这是否仍然允许其他目录中的 php 文件对该目录中的文件执行操作。例如,目录中有图像,另一个目录中包含一个 php 文件,该文件创建这些图像的缩略图并将它们存储在原始目录中。

答案1

我在 Centos 6.10 中使用虚拟主机 .conf 定义文件中的多个文件夹:

<DirectoryMatch ^/var/www/mysite/htdocs/(nophpexecutefolder1|nophpexecutefolder2)>
       php_admin_value engine Off
</DirectoryMatch>

但是,尽管它不能以通常的方式解析 php 代码,但在执行 echo 时它仍然会从 .php 输出变量声明和文本等内容。例如

<?php

echo "<strong>PHP CODE EXECUTED!!";

$a=1;
$b=2;

echo $a+$b;

以上内容是在网络浏览器中生成的吗?

PHP CODE EXECUTED!!"; $a=1; $b=2; echo $a+$b;

这可能会向用户暴露一些不太理想的代码。使用 OP 的代码时也会发生同样的情况。

因此,最好将上述内容与 .htaccess 中的以下内容结合使用:

<FilesMatch ".*.(php|php3|php4|php5|php6|php7|php8|phps|pl|py|pyc|pyo|jsp|asp|htm|html|shtml|phtml|sh|cgi)$">
 Order Deny,Allow
 Deny from all
  #IPs to allow access to the above extensions in current folder
  # Allow from XXX.XXX.XXX.XXX/32 XXX.XXX.XXX.XXX/32
</FilesMatch>

上述操作将阻止访问上述任何文件扩展名,但允许以通常的方式访问其他扩展名,如图像、css 等。访问 .php 时出现错误:

Forbidden

You don't have permission to access /nophpexecutefolder1/somefile.php on this server.

答案2

您必须登录到服务器计算机并实际查看文件的所有者:组以及 apache 以什么用户身份运行。

通常它以 www-data 形式运行

现在,如果文件夹和文件归 apache 服务器所有(例如,它们的所有权设置为 www-data),那么服务器可以对所有文件执行任何操作。

为了确保文件安全,我建议这样做:

将所有文件夹的所有者设置为:someuser,其中someuser不是www-data但可以是root。

将组设置为 www-data

删除 www-data/该组对所有文件和文件夹的写入权限。显然,其他组也是如此(Linux 权限为所有者:组:其他)

保留对上传文件夹的写权限,但从该文件夹中删除脚本执行。

就是这样。每当您想要安装插件或更改文件时,您最终都必须快速更改权限才能执行此操作。

相关内容