Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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';s文件\u获取\u内容()_Php_Http - Fatal编程技术网

如何防止PHP';s文件\u获取\u内容()

如何防止PHP';s文件\u获取\u内容(),php,http,Php,Http,我的一个php页面返回如下数据: <?php //... echo "json string"; ?> 但其他人使用file_get_contents()获取我的数据并在其他网站中使用 有谁能告诉我,我能做些什么来防止这种事情发生 我想如果我能得到请求的域名以回应类似的东西,但我不知道 获取请求域名的函数。如果请求是由服务器发送的,则 这将无济于事。我的英语很差,为了表示怀疑,请耐心等待。您可以使用$\u SERVER['REMOTE\u ADDR']获取客户端地址的地

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

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

但其他人使用file_get_contents()获取我的数据并在其他网站中使用

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

我想如果我能得到请求的域名以回应类似的东西,但我不知道

获取请求域名的函数。如果请求是由服务器发送的,则


这将无济于事。我的英语很差,为了表示怀疑,请耐心等待。

您可以使用$\u SERVER['REMOTE\u ADDR']获取客户端地址的地址。您还可以检查$\u服务器['HTTP\u REFERER'],并以这种方式阻止外部请求,但可靠性较低。您可能还可以尝试其他一些技巧。

您将在这里展开一场艰苦的战斗。我假设您用json响应的服务器端进程是通过用户浏览器中的javascript使用的。。。所以没有简单的方法来加密它。您可以尝试一些用于防止xspf的技术(请参阅)。如果您开发了客户机来传递每个客户机都是uniq的会话令牌,那么您可以减少一些问题。但是,不管是谁偷了你的数据,他都有可能发现你设置的任何机制。。。假设这是某种ajax类型的东西。如果它是一个服务器,那么正如sli所提到的,基于远程ip设置一些限制将有所帮助,再加上设置某种API身份验证令牌将更有帮助(有关一些指针,请参阅oauth)

您也可以将.htaccess与apache一起使用,阻止对页面的每个外部请求(如果在内部调用了get),或者阻止不是来自您域的每个请求:

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

<?php
 $allowedFiles[] = 'somefile.php';
 $allowedFiles[] = 'someotherFile.php';
 $allowedFiles[] = 'jsonReturnFile.php';
 if(in_array($_GET['file'], $allowedFiles)){
  include( "include/".$_GET['file'] );
 }
?>
对于对该目录或该目录中的任何文件的请求,这将返回403禁止的错误

然后,您可以对如下内容执行JSON请求:file.php?file=jsonReturnFile.php&someotherParamReadByJSonfile=1


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

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

session_start();
$_SESSION['approvedForJson'] = true;
然后在输出json数据的页面中,在输出任何内容之前,再次调用session_start()。PHP代码的开头是调用它的好地方。 然后在输出json数据之前,检查approved用户的会话变量是否存在

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