您好,不确定这是否是正确的论坛,但我想知道如何防止在特定目录中执行某些文件类型。快速谷歌搜索表明,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 权限为所有者:组:其他)
保留对上传文件夹的写权限,但从该文件夹中删除脚本执行。
就是这样。每当您想要安装插件或更改文件时,您最终都必须快速更改权限才能执行此操作。