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>
发表回复