为什么总是建议将框架文件放在公共根目录之外?
鉴于有时框架没有.ini
或没有.inc
可以由浏览器打开的文件。
好吧,将框架源代码放在 web 根目录中肯定没有任何好处。由于选择放置文件的位置是自由的,因此遵循最小权限原则是合乎逻辑的:您不需要对这些文件进行网络访问,因此您不会得到它。
一个更具体的原因是框架来源可以很容易地披露网站上使用的框架的品牌和版本(尽管这些信息通常也可以通过检查生成的内容来获得);这反过来又可以使恶意用户更容易利用已知或新发现的漏洞。
这更安全,因为如果 Web 服务器中存在任何错误配置,那么脚本文件(无论是 .php、.asp 或其他)可能会以纯文本形式输出,潜在的攻击者会看到您的所有源代码和定义的密码。所以最好的做法是只将 index.php 文件放在 webroot 中,该文件又包含来自外部 webroot 的引导脚本。
我记得一个现实世界的例子——在我居住的拉脱维亚,我们有大型社交网络“draugiem.lv”(在我们国家比 Facebook 更受欢迎),几年前他们的所有 PHP 源代码都被错误配置的服务器泄露,正如我所描述的早些时候。
除了其他答案引用的标准原因(服务器错误配置、最小权限原则等)之外,值得注意的是,包括 Zend Framework 在内的许多框架可以使用 PHP 以外格式的配置文件,例如,.ini
,.yml
等。
如果这些位于公共可访问的 Web 根目录中,那么 - 根据服务器配置 - 它们将直接提供给任何请求它们的人。由于这些配置文件通常包含数据库密码、API 密钥等敏感信息,因此当然希望尽可能地使它们无法访问。
例如,考虑application/configs/application.ini
. 如果文档根目录位于项目文件夹级别,则请求:
http://example.com/application/configs/application.ini
会把钥匙送到城堡。