为什么将框架文件夹放在公共根目录之外更安全?

时间:2013-01-15 11:18:41

标签: php zend-framework cakephp symfony yii

为什么始终建议将框架文件放在公共根目录之外?

鉴于有时框架没有可由浏览器打开的.ini.inc个文件。

3 个答案:

答案 0 :(得分:7)

嗯,从Web根目录中放置框架源肯定没有什么可以获得。由于选择放置文件的位置是免费的,因此使用principle of least privilege是合乎逻辑的:您不需要对这些文件进行Web访问,因此您无法获得它。

更具体的原因是框架资源可以轻松地披露网站上使用的框架的品牌和版本(尽管通常也可以通过检查生成的内容来获取此信息);这反过来又可以使恶意用户更容易利用已知或新发现的漏洞。

答案 1 :(得分:5)

这更安全,因为如果Web服务器中存在任何配置错误,那么脚本文件(无论是.php,.asp还是其他)都可能以纯文本形式吐出,潜在的攻击者可能会看到您的所有源代码和定义密码。所以最好的做法是只将index.php文件放在webroot中,而webroot又包含来自webroot外部的bootstrap脚本。

我记得一个真实世界的例子 - 在拉脱维亚,我住的地方,我们有大型的社交网络“draugiem.lv”(在我们国家比Facebook更受欢迎)和几年前他们所有的PHP源代码都被错误配置的服务器泄露,正如我之前所描述的那样。

答案 2 :(得分:2)

除了其他答案引用的标准原因 - 服务器配置错误,最小权限原则等 - 值得注意的是,包括Zend Framework在内的许多框架都可以使用PHP以外格式的配置文件例如,.ini.yml

如果这些是在公共可访问的Web根目录中,那么 - 根据服务器配置 - 它们将直接提供给请求它们的任何人。由于这些配置文件通常包含敏感信息,如数据库密码,API密钥等,因此最好使它们尽可能无法访问。

例如,考虑application/configs/application.ini。如果doc根目录位于项目文件夹级别,则请求:

http://example.com/application/configs/application.ini

会将钥匙交给城堡。