http referer的作用与referer信息伪造

  • 时间:
  • 浏览:0
  • 来源:知而不乎

百度搜索做了referer限制,让referer又火了一把,不少SEO网友一时间对Referer的讨论也热了起来。

那么Referer是什么呢?

Http协议头中的Referer主要用来让服务器判断来源页面, 即用户是从哪个页面来的,通常被网站用来统计用户来源,是从搜索页面来的,还是从其他网站链接过来,或是从书签等访问,以便网站合理定位.

1、如何查看Referer信息:

在http请求的Headers部分可见Referer.
使用Httpwatch、Fiddler等抓包工具可以轻松获得

2、防盗链
Referer的作用远不止如此,很多网站的防盗链就使用Referer,下载时判断来源地址是不是在允许的域名内,否则就不能下载或显示,很多网站,如微信就是通过Referer页面来判断用户是否能够下载图片.

3、电商验证
还可用做电子商务网站的安全,在提交信用卡等重要信息的页面用referer来判断上一页是不是自己的网站,如果不是,可能是黑客用自己写的一个表单,来提交,为了能跳过你上一页里的javascript的验证等目的。

当然,对于某些恶意用户,也可能伪造Referer来获得某些权限,在设计网站时要考虑到这个问题。注意不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Referer非常容易在客户端被改变。

如何伪造Referer

HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东。先看看伪造的方法,看看服务器端的手 段,服务器可以轻松实现,但是一个直接的问题就是查 remote_addr的时候,就只有一个了,容易被禁止IP:

ASP:

dim http
set http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP也可以
Http.open "GET",url,false
Http.setRequestHeader "Referer","http://www.alyy.cn/"
Http.send()

PHP(前 提是装了curl):

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.alyy.cn/xxx.asp");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.zhaoyoucai.com/");
curl_exec ($ch);
curl_close ($ch);[/php]
$server = 'www.alyy.cn';
$host = 'www.zhaoyoucai.com';
$target = '/xxx.php';
$referer = 'http://www.wodart.com/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)
\n";
}
else
{
$out = "GET $target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Cookie: SESSIONID=test\r\n";
$out .= "Referer: $referer\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}

如何防止Referer伪造

目前比较简单的防御伪造referer的方法是用验证码(Session),比如,现在有一些能防盗链软件的商业公司比如UUDOG,linkgate,VirtualWall什么的,都是开发的应用于IIS上面的dll。有的是采用cookies验证、线程控制,有的是能随机生成文件名然后做URL重写。有的方法能的确达到不错的效果。

不过,网络技术是不断发展完善的,道高一尺,魔高一丈,任何东西都有可能破解。百度搜索做了referer限制后,做SEO的难题又来了。

猜你喜欢