【问题标题】:how to prevent PHP's file_get_contents( )如何防止 PHP file_get_contents()
【发布时间】:2008-12-25 08:32:48
【问题描述】:

我的一个 php 页面返回如下数据:

<?php
  //...
  echo "json string";
?>

但是其他人使用 file_get_contents() 来获取我的数据并在其他网站上使用。

谁能告诉我我能做些什么来防止这种事情发生。

我考虑是否可以获取请求的域名来回显其他内容。但我不知道

获取请求域名的功能。如果请求是由服务器发送的,那么

将无济于事。我的英文很差,有疑问请多包涵。

【问题讨论】:

    标签: php http


    【解决方案1】:

    您也可以使用会话。如果在您的应用程序的某个地方,在用户获取 json 数据之前,您启动了一个会话,那么在您输出 json 数据的这个页面中,您可以检查会话变量。这样,只有通过会话生成器页面的用户才能查看您的输出。 假设您有生成会话的页面 A.php。在此页面中输出任何内容之前使用此代码。

    session_start();
    $_SESSION['approvedForJson'] = true;
    

    然后在您输出 json 数据的页面中,在输出任何内容之前,再次调用 session_start()。 PHP 代码的开头是调用它的好地方。 然后在输出json数据之前,检查是否存在已批准用户的会话变量。

    if ( isset($_SESSION['approvedForJson']) && $_SESSION['approvedForJson'] ) {
        echo "json data";
    } else {
      // bad request
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 $_SERVER['REMOTE_ADDR'] 来获取客户端地址的地址。您还可以检查 $_SERVER['HTTP_REFERER'] 并以这种方式阻止外部请求,但它不太可靠。您可能还可以尝试一些涉及$_SERVER 的其他技术。

      【讨论】:

        【解决方案3】:

        你在这里打一场艰苦的战斗。我假设您在 json 中响应的服务器端进程正在通过您的用户浏览器中的 javascript 使用......所以没有简单的方法来加密它。您可以尝试一些用于防止 xspf 的技术(请参阅 http://en.wikipedia.org/wiki/Cross-site_request_forgery )。如果您开发客户端以传递一些每个客户端唯一的会话令牌,则可以减少一些问题。但是,窃取您的数据的人很可能会弄清楚您采用的任何机制......假设这是某种 ajax 类型的东西。如果它是服务器-服务器的事情,那么正如 sli 所提到的,基于远程 ip 设置一些限制会有所帮助,另外设置某种 API 身份验证令牌会更有帮助(请参阅 oauth 以获得一些指示)

        【讨论】:

          【解决方案4】:

          您还可以将 .htaccess 与 apache 结合使用,以阻止对页面的每个外部请求(如果它在内部被调用)或阻止不是来自您的域的每个请求:

          Google search thingie

          编辑
          您还可以使用一些 php 文件,其中包含无法读取的文件。所以例如你有 file.php:

          <?php
           $allowedFiles[] = 'somefile.php';
           $allowedFiles[] = 'someotherFile.php';
           $allowedFiles[] = 'jsonReturnFile.php';
           if(in_array($_GET['file'], $allowedFiles)){
            include( "include/".$_GET['file'] );
           }
          ?>
          

          然后您可以允许 file_get _contents() 在该文件上并在您的 .htacces 中写入一个 rewriteRule 以禁止对 include/ 文件夹的任何请求。

          RewriteRule include* - [F,NC]
          

          这将为对该目录或目录中任何文件的请求返回 403 禁止错误。

          然后您可以向类似以下内容的 JSON 请求:file.php?file=jsonReturnFile.php&someothherParamReadByJsonFile=1

          当有人试图获取 JSON 文件的文件内容时,他们会收到禁止错误,并且获取 include.php 的文件内容不会返回任何有用的内容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-17
            • 2016-04-29
            • 2011-01-01
            相关资源
            最近更新 更多