安全地将私有 PHP 文件存储在公共目录之上并使用 require_once 加载它们吗?

Posted

技术标签:

【中文标题】安全地将私有 PHP 文件存储在公共目录之上并使用 require_once 加载它们吗?【英文标题】:Safe to store private PHP files above public directory and load them using require_once? 【发布时间】:2015-10-19 09:58:53 【问题描述】:

所以目前我的网站结构如下:

/private
    /databaseconfigfile.php
    /otherprivatestuff.php
/public
    /index.php
    /pages
        /page1.php
        /page2.php

我在每个页面的顶部使用以下命令导入这些私有文件:

require_once('../databaseconfigfile.php');

所以我可以访问其中的define 变量来填充/生成内容。

它们包含数据库详细信息、各种 3rd 方工具(如 SMTP、AWS 等)的 API 密钥等内容。这是正确的方法吗?或者我应该使用不同的 PHP 函数/方法来访问私有文件?我担心这种方法可能容易受到目录遍历攻击。

【问题讨论】:

是的,将“私有”内容保留在文档之外总是一个好主意,而不仅仅是 php 文件。 php 不关心文件在哪里,只要它们在需要时可以访问和读取。 【参考方案1】:

这是正确的方法吗?

是的。

或者我应该使用不同的 PHP 函数/方法来访问私有文件?

不,将它们放在文档根目录之外就足够了。例如,如果您的应用程序中存在Local File Inclusion 漏洞,您应该专注于修复漏洞,而不是试图隐藏您的敏感文件。

通过默默无闻的安全性根本不是安全性。

【讨论】:

【参考方案2】:

是的,这是一个很好的做法。但是,如果不可能 - 将一些文件放在网站 www 目录之上,那么您可以在包含内容的私有文件夹中创建 .htaccess 文件(用于 apache):

deny from all

它阻止访问目录中的任何文件。

【讨论】:

以上是关于安全地将私有 PHP 文件存储在公共目录之上并使用 require_once 加载它们吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 安全地将 JSON 数据写入文件

列出具有公共读取权限的 S3 对象(在私有存储桶中)

在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹

Php - 通过下载给最终用户访问文件的安全方式?

如何查找和修改在 Cloudinary 中存储为“私有”的资产?

如何递归地将目录复制到另一个目录并仅替换未更改的文件?