【问题标题】:RedirectMatch vs. Deny from All - Which is more secure?RedirectMatch vs. Deny from All - 哪个更安全?
【发布时间】:2011-07-15 08:02:29
【问题描述】:

我目前正在开发一个应用程序,该应用程序在公共 webroot 下有很多不应公开访问的目录。目前,这是通过在所有不应浏览的目录中删除具有 Deny from All 规则的 .htaccess 文件的buckload来完成的。

然而,最近我发现,通过在根目录的 .htaccess 中定义 RedirectMatch 规则列表,也会“隐藏”这些抛出 404 的文件,如下所示:

RedirectMatch 404 "/uploads*"
RedirectMatch 404 "/keys*"
RedirectMatch 404 "/private_files*"
....

RedirectMatch 方法是否存在任何其他安全漏洞,建议不要切换到这种“集中管理”系统来定义什么是公共的,什么不是?

【问题讨论】:

    标签: security apache .htaccess


    【解决方案1】:

    它们不等价。 RedirectMatch 指令在 URL 级别工作。这意味着RedirectMatch 404 "/keys*" 可以阻止您访问以/keys 开头的任何URL,而另一种方法只会影响那些特定的物理目录(无论它们的URL 是什么)。它可能是错误或功能。

    此外,如果您关心性能,Apache 将需要为服务器接收到的每个请求解析主 .htaccess 中的 RedirectMatch 规则。考虑到加载这些目录的尝试很少见,这可能是不必要的开销。

    (正如其他人可能会指出的那样,最安全的机制是将这些文件移出公共文档根目录,但我知道某些托管服务提供商不允许这样做。)

    【讨论】:

    • 完美,这就是我一直在寻找的答案。开销确实是可以轻松避免的附带损害。我坚持使用单独的 .htaccess 文件。将它移出 webroot 也是我的第一选择,但实际上主机不允许它,因此我正在寻找另一种方式。谢谢!
    【解决方案2】:
    <Directory /uploads>
        Order Deny,Allow
        Deny from all
    </Directory>
    

    【讨论】:

    • 这也是一个不错的解决方案,不幸的是我无法访问虚拟主机配置,所以这也是不行的。谢谢!
    • @ChrisR:您可以在.htaccess 中执行此操作,无需访问虚拟主机! :)
    • 根据我过去的尝试和 Apache 文档所说的,.htaccess 不在允许 的上下文中。 httpd.apache.org/docs/current/mod/core.html#directory
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2014-12-11
    • 2016-02-13
    • 2014-10-31
    相关资源
    最近更新 更多