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