黑客能否绕过强制下载 PHP 文件的 .htaccess 配置?

Can hackers circumvent .htaccess configuration which forces download of PHP files?

我正在尝试建立一个用户可以上传的网站,例如HTML 和 PHP 文件。我想防止黑客查看那些 PHP 文件(可能是 PHP shell 黑客),而是只允许下载它们(如 4shared)。但是我不确定 .htaccess 文件中的以下代码是否可以解决问题。我的意思是它会强制浏览器下载文件,但是否存在黑客可能克服 .htaccess 配置并 view 执行 [=19] 的可能性=] 个文件?

<Files *.php>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</Files>

查看你是说执行?

参见this answer。最好的方法是通过将 php_flag engine off 添加到上传目录的 .htaccess 文件来告诉 apache 不要在该目录中执行 PHP。为了防止使用 shell 注入执行,请确保目录中的所有文件都经过 chmodded 666.

此答案假设您说的是查看时执行。

首先,防止 php 被执行的最安全方法是实际将其关闭。正如之前的回答中所建议的那样,php_flag engine off 是一种方法,但据我所知,如果通过 fastcgi 调用 PHP,那可能行不通。您可以使用 RemoveHandler 指令,但您必须确保捕获所有已定义 php 的文件扩展名,这不一定限于 *.php.

This answer建议,你应该把下面的代码放在你的.htaccess中:

<Files *>
    SetHandler default-handler
</Files>

但仍然存在一个问题:如果您允许人们上传任何文件,他们可以上传他们自己的 .htaccess 并覆盖您放入的任何文件。

如果您是服务器管理员,有 2 种可能的解决方案:您可以完全禁用 php,完全不包含该模块,但这意味着您没有 php服务器范围内,这可能不是您想要的。或者您可以使用 AllowOverride None 为您的上传文件夹禁用 .htaccess 文件,但我认为这只适用于服务器配置而不适用于另一个 .htaccess 因此您可以将其放入您的 httpd.conf:

<Directory /path/to/your/upload/folder>
        #To ignore uploaded .htaccess:
        AllowOverride None
        <Files *>
                SetHandler default-handler
        </Files>
</Directory>

当然要改路径了。我上面链接的答案提出了一种更广泛的方法,也许您也应该看看。 (我知道这里很难看到链接,所以这里是完整的 url,以防万一:Disable all CGI (php, perl, …) for a directory using .htaccess

因此,如果您不是服务器管理员,您可能最安全的做法是禁止某些文件类型、文件名或使用您在脚本中删除的选定前缀或后缀重命名每个上传的文件,或者mod_rewrite 在用户再次下载文件之前。