什么是HTTP Referer
简言之,HTTP
Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器
籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP
Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。
我的问题
我刚刚把feed阅读器改变为Gregarius
,但他不像我以前用的liferea,访问新浪博客的时候,无法显示其中的图片,提示“此图片仅限于新浪博客用户交流与沟通”,我知道,这就是HTTP Referer导致的。
由于我上网客户端配置的特殊性
,首先怀疑是squid的问题,但通过实验排除了,不过同时发现了一个Squid和Tor、Privoxy协同使用的隐私泄露问题
,留待以后研究。
Gregarius能处理这个问题么?
答案是否定的
,因为Gregarius只是负责输出html代码,而对图像的访问是有客户端浏览器向服务器请求的。
不过,安装个firefox扩展也许能解决问题,文中推荐的”Send Referrer”我没有找到,但发现另外一个可用的:”RefControl
“,可以根据访问网站的不同,控制使用不同的Referer。
但是我不喜欢用Firefox扩展来解决问题,因为我觉得他效率太低,所以我用更好的方式——Privoxy。
Privoxy真棒
在Privoxy的default.action中添加两行:
{+hide-referrer{forge}}
.album.sina.com.cn
这样Gregarius中新浪博客的图片就出来了吧?+hide-referrer
是Privoxy的一个过滤器,设置访问时对HTTP Referer的处理方式,后面的forge
代表用访问地址当作Refere的,还可以换成block
,代表取消Referer,或者直接把需要用的Referer网址写在这里。
用Privoxy比用Firefox简单的多,赶紧换
吧。
From https to http
我还发现,从一个https页面上的链接访问到一个非加密的http页面的时候,在http页面上是检查不到HTTP Referer的,比如当我点击自己的https页面下面的w3c xhtml验证图标(网址为http://validator.w3.org/check?uri=referer
),从来都无法完成校验,提示:
No Referer header found!
原来,在http协议的rfc文档
中有定义:
15.1.3 Encoding Sensitive Information in URI's
...
Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.
这样是出于安全的考虑,访问非加密页时,如果来源是加密页,客户端不发送Referer,IE一直都是这样实现的
,Firefox浏览器也不例外
。但这并不影响从加密页到加密页的访问。
Firefox中关于Referer的设置
都在里,有两个键值:
-
network.http.sendRefererHeader (default=2)
设置Referer的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。参见Privacy Tip #3: Block Referer Headers in Firefox
-
network.http.sendSecureXSiteReferrer (default=true)
设置从一个加密页访问到另外一个加密页的时候是否发送Referer,true为发送,false为不发送。
利用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>
这方面的文章网上很多,参考:
不要使用Rerferer的地方
不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信。
如果你想限制用户必须从某个入口页面访问的话,与其使用Referer,不如使用session,在入口页面写入session,然后在其他页面检查,如果用户没有访问过入口页面,那么对应的session就不存在,参见这里的讨论
。不过和上面说的一样,也不要过于相信这种方式的“验证”结果。
个人感觉现在Rerferer除了用在防盗链,其他用途最多的就是访问统计,比如统计用户都是从哪里的链接访问过来的等等。
分享到:
相关推荐
HTTP Referer是HTTP协议中的一个重要概念,主要用在Web服务器的请求头(header)中。当用户点击超链接从一个页面跳转到另一个页面时,浏览器会向目标服务器发送HTTP请求。在这个请求中,会包含一个名为“Referer”的...
HTTP Referer是header的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器用户是从哪个页面链接过来的。服务器可以根据Referer值来判断请求的来源是否合法。如果用户点击被构造好的CSRF利用...
四、rel属性 五、Referrer Policy 的值 六、Referrer Policy 的用法 七、退出页面重定向
### ASP、PHP与.NET伪造HTTP-REFERER方法及其防范措施 #### HTTP-REFERER的意义与问题 在Web应用中,HTTP-REFERER字段通常用于记录客户端请求来源页面的信息,这在许多方面都有着重要的作用,例如统计分析、防盗链...
Nginx 提供了一个名为 ngx_http_referer_module 的模块,专门用于处理 HTTP 请求头中的 `Referer` 字段,从而实现防盗链功能。本文将详细介绍如何利用 Nginx 的 `referer` 指令进行防盗链配置。 `Referer` 字段在 ...
本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题...场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body 参数体。。
标题中的“VBS伪造HTTP-REFERER的实现方法”指的是使用Visual Basic Script (VBS) 来模拟HTTP请求,并在请求头中设置自定义的HTTP_REFERER字段。HTTP_REFERER是HTTP协议中的一个字段,用于记录用户从哪个页面链接...
标题中的“使用PHP伪造Referer的方法 利用Referer防止图片盗链”涉及到的是Web开发中的HTTP头部信息处理,特别是如何使用PHP来控制和利用HTTP Referer字段来防止图片资源被其他网站非法引用,即图片盗链。...
在Java Web开发中,我们经常利用HTTP协议提供的各种头部信息来实现这一目标,其中"request.getHeader("referer")"就是一种常用的手段。这个方法允许我们获取到用户发起请求时的来源页面URL,从而判断请求是否合法。 ...
JavaScript中的`referer`是一个关键的HTTP头部字段,它记录了用户从哪个URL访问了当前页面。这个信息对于网站分析、追踪用户来源以及了解流量来源至关重要。在JavaScript中,我们可以使用`document.referrer`来获取...
本文将详细介绍如何使用PHP脚本根据HTTP Referer头部信息来实现页面跳转的功能。这种技术可以在用户访问某个页面时,根据其来源地址(即Referer头部),自动重定向到预设的目标地址。这样做可以帮助网站管理员避免当...
要理解图片防盗链,首先需要了解HTTP协议中的Referer头信息原理。HTTP Referer头是一个HTTP请求头,它记录了当前请求的页面来源。在Web开发中,通过检测Referer头信息,服务器可以判断请求是否来自合法的来源。 当...
1. 验证 HTTP Referer 字段:检查 Referer 字段是否来自合法的域名。 2. 在请求地址中添加 token 并验证:在请求地址中添加一个随机数 token,並在服务器端验证该 token 是否正确。 3. 在 HTTP 头中自定义属性并验证...
在本例中,我们关注的是一个特定的BHO插件,它的主要功能是修改HTTP请求头中的`Referer`字段。 `Referer`头字段是HTTP协议中的一部分,它包含了用户从哪个URL点击链接来到当前页面的信息。这对于网站分析用户来源、...
### PHP 伪造IP和HTTP-REFERER的方法 #### 背景介绍 在网络环境中,IP地址和HTTP_REFERER(HTTP-REFERER)是两种常见的用于跟踪和识别用户请求的数据。其中,IP地址通常用来标识网络中的设备;而HTTP_REFERER则记录...
如果Referer字段的值以"http://localhost/Myphp/http/"开头,说明请求来源于预期的网站,否则将重定向到警告页面。这种方法可以防止其他网站未经许可引用或盗取网站资源。 然而,HTTP_REFERER字段并非总是可靠,...
Http Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。 Java 解决防盗链 我们可以设置一个过滤器,...
<add input="{HTTP_REFERER}" pattern="^http(s)?://(www\.)?yourdomain\.com.*" negate="true" /> <action type="Redirect" url="http://yourdomain.com/error.html" redirectType="Found" /> ``` ...
HTTP头包含了诸如User-Agent、Referer等信息,这些信息通常用于跟踪用户浏览器类型、来源页面等。然而,如果开发者没有正确地处理这些头信息,攻击者可以构造特殊的HTTP头来执行恶意的SQL语句。例如,User-Agent和...