这可能是一个非常愚蠢的问题......我昨晚开始担心,可能会通过浏览器或客户端计算机上的其他方式在服务器上查看PHP文件。 我担心的是,我有一个包含数据库用户名和密码的包含文件。如果有办法将此文件的地址放入浏览器或其他系统并查看代码本身,那么出于显而易见的原因这将是一个问题。
这是一个合理的担忧吗? 如果是这样,人们如何防止这种情况?
答案 0 :(得分:5)
如果您的服务器配置正确,则不会。我认为关于如何完成的讨论属于serverfault。
答案 1 :(得分:4)
要添加其他答案:
如果您使用像.inc这样的文件扩展名,那么确实存在更高的风险。你能直接在浏览器中打开文件吗?
缺少最重要的建议:
只有浏览器应该访问的文件才应位于可公开访问的位置。所有其他代码(和配置)应该位于一个完全独立的目录中。
例如
root
- webroot
- includes
- config
您的网络服务器(apache)仅公开'webroot'。例如,Webroot可以包含单个index.php,以及所有资产(javascript,css,images)。
任何代码index.php需要加载来自'includes'和来自'config'的所有配置。用户无法直接访问这两个目录中的任何内容,只要这样做是正确的。
答案 2 :(得分:1)
这取决于您提供包含文件的文件扩展名。
如果扩展名是Web服务器已知并执行的扩展名,则它将受到保护。如果浏览到该文件,服务器将尝试执行代码而不是仅以纯文本形式返回。
如果Web服务器不知道扩展名,则它将作为普通数据提供,因此任何人(可以猜测文件名)都可以浏览到该文件并查看源代码。
答案 3 :(得分:0)
A Directory Traversal Vulnerability可用于从远程mahine获取文件。或者,您可以使用基于MySQL的SQL注入来使用load_file()读取文件。您还可以使用w3af's urlfuzzer测试您的系统,它将查找“备份文件”,例如index.php.zip。还要确保所有文件都有.php扩展名,.inc可以从公众查看。我也会禁用Apache目录列表。
答案 4 :(得分:0)
通常情况下,无法远程查看PHP文件......这绝对没有意义。这完全取决于您使用的Web服务器以及它的设置方式。
答案 5 :(得分:0)
环顾四周后,我可以看到通过添加以下行可以通过.htaccess保护目录:
Order allow,deny
Deny from all
这显然保护了目录,因此只能进行本地非Web访问。 这允许我将我的包含在主站点目录的子目录中,这对于组织是有益的,并且可以在我无法访问Web根目录之外的文件夹的项目中使用。
有没有其他人使用这种方法?
为了好的衡量,我已经将目录权限仅用于执行。 并且include扩展名是PHP,正如其他人所建议的那样。