Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法从客户端机器查看PHP代码(实际代码而不是编译结果)?_Php_Security - Fatal编程技术网

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

有没有办法从客户端机器查看PHP代码(实际代码而不是编译结果)?,php,security,Php,Security,这可能是一个非常愚蠢的问题…我昨晚开始担心可能有某种方式可以通过浏览器或客户端机器上的其他方式查看服务器上的PHP文件。 我担心的是,我有一个包含数据库用户名和密码的include文件。如果有办法将此文件的地址放入浏览器或其他系统,并查看代码本身,那么这将是一个问题,原因显而易见 这是合理的担忧吗? 如果是这样的话,人们如何防止这种情况发生?如果您的服务器配置正确,则不会。我认为关于如何实现这一点的讨论属于serverfault。这取决于您为include文件指定的文件扩展名 如果扩展是web服

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

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

如果您的服务器配置正确,则不会。我认为关于如何实现这一点的讨论属于serverfault。

这取决于您为include文件指定的文件扩展名

如果扩展是web服务器已知并执行的扩展,那么它将受到保护。如果浏览到该文件,服务器将尝试执行代码,而不仅仅是以纯文本形式返回代码


如果web服务器不知道扩展名,它将作为普通数据使用,因此任何人(能够猜出文件名的人)都可以浏览到该文件并查看源代码。

要补充其他答案:

如果您使用像.inc这样的文件扩展名,风险确实更高。您可以直接在浏览器中打开该文件吗

最重要的建议是:

只有应由浏览器访问的文件才应位于可公开访问的位置。所有其他代码(和配置)应位于完全独立的目录中

比如说

root
  - webroot
  - includes
  - config
您的Web服务器(apache)只公开“webroot”。例如,Webroot可以包含一个index.php以及您的所有资产(javascript、css、图像)


需要加载的任何code index.php都来自“includes”,所有配置都来自“config”。如果操作正确,用户无法直接访问这两个目录中的任何内容。

可用于从远程mahine获取文件。或者,您可以使用基于MySQL的sql注入来读取文件。您还可以测试您的系统,用它查找“备份文件”,如index.php.zip。还要确保所有文件都有.php扩展名,a.inc可以公开查看。我还将禁用Apache目录列表

通常没有办法远程查看PHP文件。。。这是毫无意义的。这完全取决于您使用的web服务器及其设置方式。

环顾四周,我发现可以通过.htaccess添加以下行来保护目录:

Order allow,deny
Deny from all
这显然保护了目录,因此只能进行本地非web访问。 这使我能够将我的include保存在主站点目录的子目录中,这对组织有好处,并且可以用于我无法访问web根目录之外的文件夹的项目

还有其他人使用这种方法吗

为了更好地衡量,我只将目录权限设置为执行。
正如其他人所建议的那样,include扩展是PHP。

好建议,但遗憾的是,并非所有共享主机都提供或允许您在web根目录之外创建文件夹。我无法在web根目录之外创建目录。我所做的是为包含目录创建目录,并使其权限仅为“可执行”,以便必须执行其中的文件。我不确定这是否足够,有人能给我建议吗。我不知道如何测试它,因为问题只是在我的头脑中,我实际上还不能让服务器列出文件内容。非程序员无法帮助您修复代码中的漏洞。@Rook:OP可能更关心一些php代码(如配置)显示给用户,而不是执行,或者甚至无法与之交互,因此我必须同意Andrew的观点。@longpoke有1000种不同的方法可以实现这一点,尽管代码中存在缺陷,也许有两种方法可以实现这一点,尽管配置错误。我不明白,Rook。你怎么会意外地公开PHP源代码呢<代码>回显htmlentities(文件获取内容($\u获取['page'])?不可能在无意中做到这一点。发生这种情况的唯一现实方式是服务器配置错误。