代码之家  ›  专栏  ›  技术社区  ›  Luca Reghellin

如何拒绝在特定apache目录上执行任何文件?

  •  0
  • Luca Reghellin  · 技术社区  · 6 年前

    我使用的是Apache2和PHP。我构建了一个允许用户将文件上载到特定目录的表单。我已经实现了一些其他的安全措施,但我还想拒绝执行该目录上的任何文件。 它们只能下载 不由用户或脚本执行。

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

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

    您能帮我更正代码或指出最佳实践吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   symcbean    6 年前

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

    以这种方式禁用PHP执行只提供了一个单一的保护层。如果该层由于某种原因失败,那么您的安全性就不复存在了。此外,这只会在Web服务器直接指向文件的URL时阻止内容的执行-如果有人能欺骗现有的PHP代码将内容包含在内,它不会提供任何保护。

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

    这不会阻止包含漏洞,但会消除直接寻址漏洞。所有对内容的访问都必须通过一个PHP脚本进行中介。但从好处来看,避免OMGWTF要容易得多,比如:

    强制类型应用程序/Octet流

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

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

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