正 文:
关于隐藏来路 Referrer 在某些情况下很有用,国外网赚界使用的非常广泛。比如流量提供方由于不想让联盟知道自己的流量来源,就需要隐藏自己来源网站的 referer。今天飘易就来简单分享下我自己的心得。
先看如何获取这个来路:
js:
document.referrerphp: echo
$_SERVER['HTTP_REFERER']; 最开始,大家使用的技术一般是 DMR (Double Meta Refresh) ,即两次meta refresh 刷新,这种技术对于ie浏览器,目前为止还有有效果。但是对于chrome、Safari、firefox浏览器就不一定可行,存在泄漏的风险。
目前为了保险起见,飘易觉的还有以下几个方式,可以同时采用:
1、
Meta Refresh 这个就不说了,很简单,页面2次跳转刷新。
2、
Javascript Location Replace replace 方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后退”来访问已经被替换的URL。
语法:
location.replace(URL) 如果有这种应用: 需要重新加载该页面,也就是说期望页面能够在服务端重新被创建,期望是 Not IsPostback 的,这里,location.replace() 就可以完成此任务。被replace的页面每次都在服务端重新生成。
代码: location.replace(location.href);
3、
iFrame Parent Post 使用示例一:
<html>
<head>
<script>
function load(){
var postdata = '<form id="dynForm" method="POST" action="http://www.piaoyi.org/" target=
"_top">' +
'<input type=hidden name="uname" value="piaoyi" />' +
'<input type=hidden name="pwd" value="123456" />' +
'</form>';
top.frames[0].document.body.innerHTML=postdata;
top.frames[0].document.getElementById('dynForm').submit();
}
</script>
</head>
<body onload="load()">
<iframe src="about:blank" id="noreferer"></iframe>
</body>
</html>
使用示例二:
function open_without_referrer(link){
document.body.appendChild(document.createElement('iframe')).src='javascript:"<script>top.location.replace(\''+link+'\')<\/script>"';
}
4、
Flash getURL Function 这点是利用Flash里面的 getURL 函数打开新页面。比如
getURL(open_url,'_blank'); 就可以在新窗口中打开指定url。
但是经过飘易的测试,flash跳转也不靠谱了。在chrome、firefox下都泄漏了来路referer信息。只有在ie下 才没有了JS的来路,但是php的来路 $_SERVER['HTTP_REFERER'] 还是有值,指向具体的 swf 文件。
flash跳转示例:
网页代码:
<!--flash引用代码-->
<object id="open_url" width="25" height="20" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" >
<param name="movie" value="piaoyi.org_open_url.swf?callback=get_url" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed width="25" height="20" src="piaoyi.org_open_url.swf?callback=get_url" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"/>
</object>
<script type="text/javascript">
function get_url(){
return 'http://www.piaoyi.org/';
}
</script>
新建个flash,添加个button, 在动作中粘贴如下代码:
on (release) {
import flash.external.ExternalInterface;
loadVariablesNum('','callback');//获取js回调函数名称,存放在callback变量中
if(callback!=''){
open_url=ExternalInterface.call(callback);//调用js程序,获取url
if(open_url!=undefined){
getURL(open_url,'_blank');//在新窗口打开链接
}
}
}
5、
HTTPS跳到HTTP 由于HTTPS是加密传输,出于安全需要,避免泄露用户的隐私(如银行支付系统的账户私人敏感信息来源) ,几乎所有主流浏览器都遵守了
RFC-2616规范,在 https 页面 来到 http 页面时,不会发送 referer 信息。 要做到这点,就需要自行架设https环境,需要考验技术了。
注意,我说的是几乎所有主流浏览器,但是就有个别浏览器为了自身的利益,不遵守规范。比如手机端的安卓/苹果 UC浏览器,即使是由HTTPS 来到 HTTP页面时,如果用户是从 UC自己的神马搜索点击搜索结果后来到HTTP页面时,然后跳转到 https 再跳到 http 时,神马搜索的来路referrer依然被 uc浏览器发送过来了。
UC浏览器耍流氓啊。与此类似的还有 小米miui系统里自带的小米浏览器,有的时候也会偷偷发送这个referer。
附注:
RFC-2616规范第15.1.3条:
15.1.3 Encoding Sensitive Information in URI's
Because the source of a link might be private information or might
reveal an otherwise private information source, it is strongly
recommended that the user be able to select whether or not the
Referer field is sent. For example, a browser client could have a
toggle switch for browsing openly/anonymously, which would
respectively enable/disable the sending of Referer and From
information.
Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol. 6、
使用标签:rel="noreferrer" 目前基于webkit内核的比如chrome、Safari浏览器均支持该标签。
7、
html data URI scheme 使用内嵌的方式,不会发起二次请求。