安全地将私有 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 加载它们吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹