HTTP_REFERER的用法及伪造及去掉REFERER方法

HTTP_REFERER的用途

HTTP_REFERER提供了引导用户代理到当前页的前一页的地址信息,常见的一些应用场景有防盗链,统计文章有多少次是来自谷歌搜索结果,多少次来自百度搜索结果等。 
下面以防盗链为例,讲讲HTTP_REFERER的用法。 
如果你经常写博客,就一定会遇到盗用你辛辛苦苦整理过的文章不跟你打任何招呼甚至连原文链接都一并抹除的网站,文字这个层面我们没法控制,但是图片这个层面我们是可以控制的。举个例子,如果你也曾复制过一些类似腾讯等网站的文章,你会发现黏贴下来发表之后经常出现图片无法显示,这是如何做到的呢? 
场景:a站点的图片全部存储在c站点(云服务器)上,c站点将识别调用方是否来自a站点,否则显示一张错误图片,b站是盗图网站。 
a站和b站的代码一致,如下所示:

<img src="http://www.c.com/image.php?fname=jb.png" width="500px" height="500px" />;
1
重点是c站的代码,如下所示:

<?php
if(strpos($_SERVER['HTTP_REFERER'], 'www.a.com')  !== false){
    //以下的写法并不严谨,这里只是做测试
    if(file_exists($_GET['fname'])){
        echo file_get_contents($_GET['fname']);
    }
}

这样当a站访问时图片可以正常显示,而b站访问时图片是显示不出来的。

什么时候获取不到HTTP_REFERER值

综上所述,HTTP_REFERER存在需要两个条件:

浏览器(客户端)请求(服务器端请求的情况下,是不存在HTTP_REFERER的,但是可以伪造header,这在下一节中将提及);
存在前导页;

以下是网友收集的获取不到HTTP_REFERER值的情况:

在浏览器内直接敲URL

windows桌面上的超链接图标
浏览器内书签
第三方软件(如Word,Excel等)内容中的链接
SSL认证网站跳入
http://example.com/“> meta页面设置自动跳转时,在example.com将取不到REFERER URL
使用JavaScript的Location.href或者是Location.replace()
在以下情况下可以获取HTTP_REFERER值:

直接用
form提交的表单(POST或GET)
src请求(如js的script标签及html中img标签的src属性)
 

去掉 REFERER的方法

<iframe src="auto-refresh.html" width=500 height=500 rel="noreferrer"></iframe>
<html>
<head>
<meta name="referrer" content="never">
<meta http-equiv="refresh" content="0;url=http://xxx.xxx.xxx">
</style>
</head>
<body></body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章