我正在尝试建立一个用户可以上传例如.HTML和PHP文件的网站。我想防止黑客查看这些PHP文件(可能是PHP外壳黑客),而是只允许下载它们(如4shared)。但我不确定我的.htaccess
文件中的以下代码是否可以解决问题。我的意思是它迫使浏览器下载文件,但是黑客是否有可能克服.htaccess
配置并
<Files *.php>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
视图的意思是执行?
看到这个答案。最好的方法是告诉 apache 不要在该目录中执行 PHP,方法是将php_flag engine off
添加到上传目录的 .htaccess 文件中。为了防止使用 shell 注入执行,请确保目录中的所有文件都是 chmodded 666。
这个答案假设你的意思是当你说视图时执行。
首先,防止 php 被执行的最安全方法是实际关闭它。正如前面的答案中所建议的那样,php_flag engine off
是这样做的一种方法,但据我所知,如果通过fastcgi调用PHP,这可能不起作用。您可以使用 RemoveHandler
指令,但您必须确保捕获已定义 php 的所有文件扩展名,这不一定限于 *.php。
这个答案建议,你应该把以下代码放在你的.htaccess中:
<Files *>
SetHandler default-handler
</Files>
但仍然存在一个问题:如果您允许人们上传任何文件,他们可以上传自己的 .htaccess 并覆盖您放入的任何内容。
如果您是服务器管理员,则有两种可能的解决方案: 您可以通过根本不包含模块来完全禁用 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>
当然,你必须改变路径。我上面链接的答案提出了一种更广泛的方法,也许你也应该看看。(我知道这里很难看到链接,所以这里是完整的网址,以防万一:使用 .htaccess 禁用目录的所有 CGI(php、perl、...)
因此,如果您不是服务器管理员,那么在用户再次下载文件之前,如果您禁止某些文件类型、文件名或使用所选前缀或后缀重命名每个上传的文件,并在脚本中或使用mod_rewrite删除这些文件,则可能是最安全的。