【问题标题】:Storing script files outside web root将脚本文件存储在 Web 根目录之外
【发布时间】:2011-03-03 08:17:05
【问题描述】:

出于保护带有敏感信息的 php 文件(如数据库连接和登录信息)如果网络服务器打嗝并停止保护 php 文件并且它们对知道在哪里查找的外人变得“可见”。

这对我来说似乎有点偏执,但我猜人们以前对此感到非常不满,所以我愿意继续。该建议通常采用将包含文件放在类似“../include_files/”之类的形式,因此它不直接位于文档根目录中,并且外部人员无法通过 Web 服务器直接访问。

我的问题是:这种方式与将“include_files”目录放在文档根目录下并在其中粘贴 .htaccess 文件(带有适当的条目)之间的安全性是否存在显着差异?将 .htaccess 文件放在 '../include_files/' 中会带来显着的改进那里吗?

TIA,

蒙特

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    使用 .htaccess 会增加开销,因为 Apache 需要检查和处理另一个项目。

    将文件排除在 Web 根目录之外并不是偏执,而是一种很好的做法。如果有人直接访问“包含”文件之一并且由于未加载所有先决条件文件而引发显示错误,会发生什么?

    每个文件都需要有自己的安全检查,以确保它在预期的环境下运行。 Web 可访问区域中的每个可执行文件都是潜在的安全漏洞。

    【讨论】:

    • +1 用于指出 .htaccess 的性能劣势(此外,如果您指定 AllowOverride None,Apache 甚至不会查找该文件)。同意您关于将文件保留在文档根目录之外的其他观点;设置需要几分钟(尤其是使用 __autoload/spl_autoload_register),为什么不这样做呢?
    • 问题是:你不能在许多/大多数共享主机中这样做。没有?
    • 根据我的经验,共享主机会为您提供一个目录,其中包含设置为公共的 www 目录。
    【解决方案2】:

    这实际上取决于您在include_files 中的内容。最重要的是您将拥有的任何凭据放在文档根目录之外(数据库登录等)。其他一切真的都是次要的,没有那么重要。

    如果您不希望任何人窃取您的源代码,请尝试遵循 Zend 约定:

    application
    library
    public
    

    DocumentRoot 指向public,它只包含媒体文件、js/css 文件。 HTML/views、db logic、conf/credentials 在application。第三方库位于library

    【讨论】:

      【解决方案3】:

      理论上,如果你只是在文件夹中粘贴一个 .htaccess 文件,你仍然可以直接调用 .php 文件。

      将它们从服务器根目录中取出;但是,请防止浏览您网站的人永远访问它们。

      【讨论】:

        猜你喜欢
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多