有没有办法从客户端机器查看PHP代码(实际代码而不是编译结果)?

时间:2010-05-17 09:45:27

标签: php security

这可能是一个非常愚蠢的问题......我昨晚开始担心,可能会通过浏览器或客户端计算机上的其他方式在服务器上查看PHP文件。 我担心的是,我有一个包含数据库用户名和密码的包含文件。如果有办法将此文件的地址放入浏览器或其他系统并查看代码本身,那么出于显而易见的原因这将是一个问题。

这是一个合理的担忧吗? 如果是这样,人们如何防止这种情况?

6 个答案:

答案 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,正如其他人所建议的那样。