`

HTTP Referer

阅读更多

什么是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详解及Referer控制

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的

    ruanyf#articles#2019-06-04-HTTP Referer 教程1

    四、rel属性 五、Referrer Policy 的值 六、Referrer Policy 的用法 七、退出页面重定向

    nginx利用referer指令实现防盗链配置

    nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求,我们应该牢记。下面这篇文章主要介绍了nginx利用referer指令实现防盗链配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER的方法

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER的方法

    使用php伪造referer的方法 利用referer防止图片盗链

    什么是HTTP Referer简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接...

    Web应用安全:CSRF防范对策.pptx

    HTTP头中的Referer字段记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施 CSRF攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer...

    VBS伪造HTTP-REFERER的实现方法

    最近用VBS模拟POST提交表单,发现遇到检测Referer的页面就不管用了。

    Android CordovaWebview Add Header Referer

    本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题...场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body 参数体。。

    request.getHeader("referer")防盗链

    HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。

    完美兼容各大浏览器获取HTTP_REFERER方法总结

    后来查了一些相关资料,发现在IE 中通过 [removed].href 或者是 是无法获取HTTP_REFERER, 真是搞不懂 IE 的浏览器,很多浏览器运行的很好的东西,它就是不支持,最后没有办法,只能PHP伪造来源HTTP_REFERER的方法...

    推荐人控制「Referer Control」-crx插件

    Referer Control授予对HTTP Referer的完全控制权。您可以全局或在每个站点上伪造所需的任何引荐来源。或者,您可以选择完全禁用引荐来源网址。也可以在JavaScript document.referrer上使用! 支持语言:English

    XSS漏洞检测工具

    * Simple injection from File, with tor proxy and spoofing HTTP Referer headers: $ python XSSer.py -i "file.txt" --proxy "http://127.0.0.1:8118" --referer "666.666.666.666" ------------------- * ...

    php中HTTP_REFERER函数用法实例

    本文实例分析了php中HTTP_REFERER函数用法。分享给大家供大家参考。具体分析如下: 利用php的http_referer函数来判断用户的来路,这是比较简单的,实例代码如下: 复制代码 代码如下:&lt;?php  if (isset($_SERVER[...

    php 伪造HTTP_REFERER页面URL来源的三种方法

    php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER[‘HTTP_REFERER’],但是这个来源页面的URL地址是可以被伪造和欺骗的,本文章向大家介绍伪造HTTP_REFERER页面URL的三种...

    Referer Control-crx插件

    在每个站点上控制HTTP Referer。 Referer Control授予对HTTP Referer的完全控制权。 您可以全局或在每个站点上伪造所需的任何引荐来源。 或者,您可以选择完全禁用引荐来源网址。 也可以在JavaScript document....

    php 伪造IP和HTTP-REFERER的方法

    php 伪造IP和HTTP-REFERER的方法,对于采集,匿名投票等很有用处

    Web应用安全:CSRF防范辅助性对策.pptx

    1、验证 HTTP Referer 字段。 2、在请求地址中添加token并验证。 3、在HTTP 头中自定义属性并验证。 4、AngularJS提供的CSRF方案. 2、CSRF的常见防范辅助性对策 1、增加验证码。 2、cookies设置sameSite。 3、客户端...

    实战Nginx.取代Apache的高性能Web服务器

    13.14 HTTP Referer模块 13.15 Http Limit Zone模块 13.16 Http Limit Req模块 13.17 Http Log模块 13.18 Http Map模块 13.19 Http Memcached模块 13.20 Http Proxy模块 第14章 Nginx的其他HTTP模块 14.1 ...

    实战nginx-张宴

    13.14 HTTP Referer模块 13.15 HTTP Limit Zone模块 13.16 HTTP Limit Req模块 13.17 HTTP Log模块 13.18 HTTP Map模块 13.19 HTTP Memcached模块 13.20 HTTP Proxy模块 13.21 HTTP Rewrite模块 13.22 HTTP SSI模块 ...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    13.14 HTTP Referer模块 13.15 Http Limit Zone模块 13.16 Http Limit Req模块 13.17 Http Log模块 13.18 Http Map模块 13.19 Http Memcached模块 13.20 Http Proxy模块 第14章 Nginx的其他HTTP模块 14.1 Http ...

Global site tag (gtag.js) - Google Analytics