Home >Backend Development >PHP Tutorial >判断访问来源的疑问

判断访问来源的疑问

WBOY
WBOYOriginal
2016-06-23 14:10:421095browse

假设我的站点是 a.com 有图片a.com/123.png

b.com 使用该图片的时候 http_referer 是?

然后直接在地址栏输入a.com/123.png http_referer 是b.com

我想问的是怎么判断图片是其它站被引用还是用户直接访问?


回复讨论(解决方案)

Request.ServerVariables["HTTP_REFERER"]
Request.ServerVariables["HTTP_REFERER"].ToString().Contains(Request.ServerVariables["HTTP_HOST"].ToString())

在外链点进去的时候 HTTP_REFERER也带着这个网站的主机地址呢
加个IF语句来判断。然后tostring解析到地址,就可以用计数器判断了

直接浏览器输入 HTTP_REFERER 为空
从页面链接过来 HTTP_REFERER 为那个页面的url

但是需要注意的是,所有有 HTTP_ 前缀的变量都是访问方提供的,可靠性极低

你只能靠HTTP_REFERER来判断,虽然这个不是很靠谱可以伪造。

Request.ServerVariables["HTTP_REFERER"]
Request.ServerVariables["HTTP_REFERER"].ToString().Contains(Request.ServerVariables["HTTP_HOST"].ToString())

在外链点进去的时候 HTTP_REFERER也带着这个网站的主机地址呢
加个IF语句来判断。然后tostring解析到地址,就可以用计数器判断了

有没有PHP版本的大侠

$_SERVER['HTTP_REFERER']里面
至于里面参数好像有点多。打出来慢慢看。

楼主说的这个问题就是盗链啊。

 header("content-type:text/html; charset=utf-8");
 if(isset($_SERVER['HTTP_REFERER'][
])){
 
//判断$_SERVER['HTTP_REFERER'是不是以http://localhost/test/为开头的
//如果是,则说明是本网站,如果不是,则说明不是本网站,
if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/test/")==0){
echo '这是本站访问';

}else{
//跳转到警告页面
header('Location:warning.php');
}
 
 }else{
//跳转到警告页面
header('Location:warning.php');
 }

以上这段代码是我自己写的一段反盗链的代码。你的问题,一看这段代码就能够解决。在传智播客韩顺平php系列视频中的第84讲就讲到了这个反盗链的问题。可以更清楚的了解了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn