我正在使用apache2和php。我构建了一个表单,允许用户将文件上传到特定目录。我已经实现了一些其他安全性的东西,但我也想拒绝执行该目录上的任何文件。 它们仅用于下载,不由用户或脚本执行。
我有htaccess的以下代码,但它是假的,不确定语法,也不是最好的方法:
<Location "/example/mydir/">
<Files .>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
</Location>
您能否帮我纠正一下这些代码或指出我的最佳做法?
答案 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也是一个好主意。