注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

关于伪造 HTTP REFERER 问题  

2013-12-17 23:13:41|  分类: Web技术-应用研究 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
我们知道REFERER是HTTP协议里的请求头,它是让你访问某站时能让某站记住你来自哪里。也就说:你要明确一点是REFERER是请求头里的域。
另外我们也知道你要访问某网站,需要一个工具,一般这个工具就是我们所说的浏览器。此时,被访问的网站称为服务端,浏览器被称为客户端。所有 HTTP 协议里的请求头都是由浏览器帮我们去设置的(包括REFERER),但是你要记住一点是:浏览器的REFERER是无法设置、修改的,只能获取,也就是只要是走了浏览器referer就不可控。
那么有没有办法来伪造REFERER呐?

答案是可以的,我们要做的只是模拟一个客户端(浏览器)出来,不过如果伪造REFERE后,仍然要用浏览去访问,跳转之类的,那么走了浏览器后REFERER仍不可控,下面是具体代码:

(fc_lamp提醒:很多同学对PHP header() 函数不了解,认为使用header()就不走浏览器了,其它不那样。header()只是PHP使用它来向浏览器发送的响应头域,包括跳转 Location、REFERER、COOKIE等)


A站点,链到C站点:

<?php
echo<<<HTML
<a href="http://127.0.0.1/abc/c.php">This will be going c</a>

HTML;



C站点,跳转到B站:

<?php

//跳到b站
$url = 'http://www.baidu.com/';
//随机来路
$froms = array(
'http://www.baidu.com',
'http://www.a2.com',
'http://www.f.com'
);
$from = $froms[array_rand($froms)];

//获取B站的内容
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,$from);
//curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_exec($ch);


//改变浏览器默认地址(同一域下才行)
echo<<<HTML
<!--<meta http-equiv="Refresh" content="1; url={$url}" />-->
<script>


history.pushState(null,null,'{$url}');



</script>
HTML;






B站点,记录REFERER:

<?php
file_put_contents('./test.html',$_SERVER['HTTP_REFERER'],FILE_APPEND);
echo<<<HTML
This is b!!
HTML;






  评论这张
 
阅读(458)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017