如何拒绝执行特定apache目录下的任何文件?

时间:2018-05-29 09:55:12

标签: php apache .htaccess security configuration

我正在使用apache2和php。我构建了一个表单,允许用户将文件上传到特定目录。我已经实现了一些其他安全性的东西,但我也想拒绝执行该目录上的任何文件。 它们仅用于下载,不由用户或脚本执行。

我有htaccess的以下代码,但它是假的,不确定语法,也不是最好的方法:

<Location "/example/mydir/">
    <Files .>
        ForceType application/octet-stream
        Header set Content-Disposition attachment
    </Files>
</Location>

您能否帮我纠正一下这些代码或指出我的最佳做法?

1 个答案:

答案 0 :(得分:1)

提供文件上传/下载功能是一大堆蠕虫。除了攻击您的服务器的可能性之外,还有关于数据走私的问题。恶意软件和知识产权。但既然你特别询问前者......

以这种方式禁用PHP执行只提供单层预防。如果该层因某种原因失败,那么您的安全性就会消失。此外,如果网络服务器直接指向文件的URL,这只会阻止内容的执行 - 如果有人可以欺骗现有的PHP代码来包含内容,它就不会提供任何保护。

最小的方法是将内容存储在URL可访问的目录之外(即在文档根目录和任何其他映射目录之外)。

这不会阻止包含漏洞,但会消除直接寻址漏洞。然后,所有对内容的访问都必须由PHP脚本调解。但从好的方面来说,它更容易避免像OMGWTF那样:

  

ForceType application / octet-stream

关闭PHP执行(php_flag engine off)是禁用执行的更好解决方案,而不是更改mime类型。强迫像这样的mime类型总是一个坏主意。

另一种/补充方法是encode the files,从而防止代码包含漏洞。

allocate your own filenames to the artefacts on your host filesystem也是一个好主意。