关于隐藏来路 Referrer 在某些情况下很有用,国外网赚界使用的非常广泛。比如流量提供方由于不想让联盟知道自己的流量来源,就需要隐藏自己来源网站的 referer。今天就来简单分享下我自己的心得。
先看如何获取这个来路:
js: document.referrer
php: echo $_SERVER['HTTP_REFERER'];
最开始,大家使用的技术一般是 DMR (Double Meta Refresh) ,即两次meta refresh 刷新,这种技术对于ie浏览器,目前为止还有有效果。但是对于chrome、Safari、firefox浏览器就不一定可行,存在泄漏的风险。
最常用的还是使用iframe来隐藏referrer。
下面来看一个例子:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>document.referrer</title>
</head>
<body>
<h1>隐藏referrer</h1> 跳转至百度(有referrer):
<a target="_blank" href="https://www.baidu.com/">test</a>
<script type="text/javascript">
var iframe = document.createElement('iframe'),
html = '<!doctype html><head><meta charset="utf-8"></head><body>跳转至百度(无referrer):<a target="_blank" href="https://www.baidu.com/">referrer test</a></body>',
src = 'javascript:document.write(window.frameElement.getAttribute(\'data-src\'))';
iframe.setAttribute('data-src', html);
iframe.setAttribute('src', src);
iframe.width = '500';
iframe.height = '300';
document.body.appendChild(iframe);
</script>
</body>
效果如图:
当我们点击有referrer的a标签的时候,在百度页面我们可以看到referrer。

当我们点击ifame中嵌套的a标签的时候,在百度页面我们可以看到referrer为空字符串。

目前为了保险起见,还有以下几个方式,可以同时采用:
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
使用示例一:
使用示例二:
4、Flash getURL Function
这点是利用Flash里面的 getURL 函数打开新页面。比如 getURL(open_url,'_blank'); 就可以在新窗口中打开指定url。
但是经过飘易的测试,flash跳转也不靠谱了。在chrome、firefox下都泄漏了来路referer信息。只有在ie下 才没有了JS的来路,但是php的来路 $_SERVER['HTTP_REFERER'] 还是有值,指向具体的 swf 文件。
flash跳转示例:
网页代码:
</script>
新建个flash,添加个button, 在动作中粘贴如下代码:
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条:
Because the source of a link might be private information or might
Clients SHOULD NOT include a Referer header field in a (non-secure)
6、使用标签:rel="noreferrer"
目前基于webkit内核的比如chrome、Safari浏览器均支持该标签。
7、html data URI scheme
使用内嵌的方式,不会发起二次请求。
2017年08月08日