【问题标题】:Protect PHP source files against file_get_contents()?保护 PHP 源文件免受 file_get_contents() 的影响?
【发布时间】:2015-11-19 18:22:54
【问题描述】:

我有不少客户要求同样的事情。博客、购物车、通讯系统等。

因此,我没有每次都重新创建后端,而是创建了一个很酷的小 PHP 应用程序。我的应用程序的第一部分充当包管理器。我使用一个配置文件来输入我的包需要的所有信息。

该配置文件中包含的主要信息是管理员的用户名和密码(尽管密码可能是散列的),以及与 MySQL 数据库的连接信息。

当我开始在我的包中使用file_get_contents() 时,我开始考虑这个问题...不能有人从远程服务器列出站点目录,并从他们的一端使用file_get_contents() 来查看我的PHP 源代码吗?

如果是这样的话,显然这是一个巨大的安全问题,我似乎想不出办法来阻止这种情况的发生。

是否有一种标准方法可以防止此类攻击?

【问题讨论】:

  • 如果你 fopen() 一个文件通过 HTTP 并且该文件实际上没有输出/回显任何内容,那么 fopen() 将不会收到任何内容,因为 HTTP 服务器将执行 PHP 并发送输出。
  • @AbraCadaver 我说错了。我已经编辑了我的问题。我的意思是file_get_contents()
  • file_get_contents() 也一样,试试吧。该文件是通过 HTTP 请求的,因此网络服务器执行 PHP,然后发送结果。
  • @AbraCadaver 我现在明白你的意思了。该函数是 PHP,所以它是服务器端的。因此,除非我专门创建了一个页面来输出内容,否则他们无法从他们的服务器获取我的代码,甚至无法通过 AJAX 请求。有点傻的问题。我很抱歉。
  • 如果你能提供一个答案,我很乐意接受。

标签: php mysql security configuration


【解决方案1】:

如果您fopen()file_get_contents() 或使用其他 PHP 函数通过 HTTP 打开文件并且该文件实际上没有输出任何内容,则不会收到任何内容。 HTTP 服务器将执行 PHP 并发送输出,就像在浏览器中查看时一样。

只要您的网络服务器配置为在 PHP 处理后提供这些 PHP 文件,那么就没有问题。

【讨论】:

    【解决方案2】:
    file_get_contents()
    

    只需获取响应标头和正文数据。 正文 - HTML、JSON 数据、XML 等,沉迷于如何设置远程服务器。 如果远程服务器不支持 PHP 代码,并且不安装 PHP 解释器,则该服务器的 php 代码仅包含文本文件,然后调用 file_get_contents() 返回 php 代码。

    【讨论】:

      【解决方案3】:

      file_get_contents() 函数只获取 HTML 代码(加载页面时显示的内容),而不是完整的 PHP 代码。

      要获取文件的全部内容,需要使用fopen()之类的函数,只是不可用。

      【讨论】:

      • file_get_contents 可以获取 HTML 代码之外的内容。试试file_get_contents('http://fonts.googleapis.com/css?family=Arimo:400,700,400italic,700italic|Bitter:400,700,400italic|Yanone+Kaffeesatz:700');
      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2018-07-24
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多