HTTP属性之Referer

HTTP来源地址(referer,或HTTP referer),是HTTP表头的一个字段,用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP来源地址,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
而 dereferer 则是将HTTP来源地址信息剥离,所以网站将无法识别访客从何而来。

Referer的正确英语拼法是referrer。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一。

当访客访问网页时,HTTP来源地址 (referer 或 referring page) 是前一个网页的URL。如果是图片的话,通常指的就是图片所在的网页。在网页浏览器送往网页服务器的时候,HTTP来源地址就被包含在HTTP请求方法中。

许多网站都会把引用地址纪录起来以便追踪用户的动态,大部分的分析软件都会处理这个信息。但是引用地址信息可能会有隐私权的问题,部分网页浏览器允许用户设置不要提交这个信息,有些代理服务器和防火墙也 会把引用地址信息过滤掉,以避免让外部知道非公开的网站地址。缺少了引用地址信息有可能会造成某些使用问题:某些服务器会因为缺少了正确的引用地址信息而 进行阻挡,以避免未经授权的图片引用(图像防盗链)或是其他对服务器有影响的行为。针对这样的阻挡,有些软件则提供了针对特定网站提交假来源地址的功能 (反防盗链)。

如何取得HTTP来源地址
ASP.NET(C#)

 string strReferrer = Request.UrlReferrer.AbsolutePath.ToString();
 string strReferrer = Request.ServerVariables("http_referrer");
 string strReferrer = Request.UrlReferrer.ToString();

ASP

strReferrer = Request.ServerVariables("HTTP_REFERER").Item;

PHP

$strReferrer = $_SERVER["HTTP_REFERER"];

利用referer防止图片盗链

虽然Referer并不可靠,但用来防止图片盗链还是足够的,毕竟不是每个人都会修改客户端的配置。实现一般都是通过apache的配置文件,首先设置允许访问的地址,标记下来:# 只允许来自domain.com的访问,图片可能就放置在domain.com网站的页面上

SetEnvIfNoCase Referer "^http://www.domain.com/" local_ref
# 直接通过地址访问
SetEnvIf Referer "^$" local_ref

然后再规定被标记了的访问才被允许:

<FilesMatch ".(gif|jpg)">
	Order Allow,Deny
	Allow from env=local_ref
</FilesMatch>

或者

<Directory /web/images>
	Order Deny,Allow
	Deny from all
	Allow from env=local_ref
</Directory>

已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注