`

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是HTTP协议中的一个重要概念,主要用在Web服务器的请求头(header)中。当用户点击超链接从一个页面跳转到另一个页面时,浏览器会向目标服务器发送HTTP请求。在这个请求中,会包含一个名为“Referer”的...

    csrf绕过Referer技巧-01

    HTTP Referer是header的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器用户是从哪个页面链接过来的。服务器可以根据Referer值来判断请求的来源是否合法。如果用户点击被构造好的CSRF利用...

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

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

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

    Nginx 提供了一个名为 ngx_http_referer_module 的模块,专门用于处理 HTTP 请求头中的 `Referer` 字段,从而实现防盗链功能。本文将详细介绍如何利用 Nginx 的 `referer` 指令进行防盗链配置。 `Referer` 字段在 ...

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

    ### ASP、PHP与.NET伪造HTTP-REFERER方法及其防范措施 #### HTTP-REFERER的意义与问题 在Web应用中,HTTP-REFERER字段通常用于记录客户端请求来源页面的信息,这在许多方面都有着重要的作用,例如统计分析、防盗链...

    Android CordovaWebview Add Header Referer

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

    VBS伪造HTTP-REFERER的实现方法

    标题中的“VBS伪造HTTP-REFERER的实现方法”指的是使用Visual Basic Script (VBS) 来模拟HTTP请求,并在请求头中设置自定义的HTTP_REFERER字段。HTTP_REFERER是HTTP协议中的一个字段,用于记录用户从哪个页面链接...

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

    标题中的“使用PHP伪造Referer的方法 利用Referer防止图片盗链”涉及到的是Web开发中的HTTP头部信息处理,特别是如何使用PHP来控制和利用HTTP Referer字段来防止图片资源被其他网站非法引用,即图片盗链。...

    request.getHeader("referer")防盗链

    在Java Web开发中,我们经常利用HTTP协议提供的各种头部信息来实现这一目标,其中"request.getHeader("referer")"就是一种常用的手段。这个方法允许我们获取到用户发起请求时的来源页面URL,从而判断请求是否合法。 ...

    网站防盗链(IIS7.0与IIS7.5配置防盗链)

    &lt;add input="{HTTP_REFERER}" pattern="^http(s)?://(www\.)?yourdomain\.com.*" negate="true" /&gt; &lt;action type="Redirect" url="http://yourdomain.com/error.html" redirectType="Found" /&gt; ``` ...

    javascript操作referer详细解析

    JavaScript中的`referer`是一个关键的HTTP头部字段,它记录了用户从哪个URL访问了当前页面。这个信息对于网站分析、追踪用户来源以及了解流量来源至关重要。在JavaScript中,我们可以使用`document.referrer`来获取...

    PHP利用REFERER根居访问来地址进行页面跳转

    本文将详细介绍如何使用PHP脚本根据HTTP Referer头部信息来实现页面跳转的功能。这种技术可以在用户访问某个页面时,根据其来源地址(即Referer头部),自动重定向到预设的目标地址。这样做可以帮助网站管理员避免当...

    Referer原理与图片防盗链实现方法详解

    要理解图片防盗链,首先需要了解HTTP协议中的Referer头信息原理。HTTP Referer头是一个HTTP请求头,它记录了当前请求的页面来源。在Web开发中,通过检测Referer头信息,服务器可以判断请求是否来自合法的来源。 当...

    Shiro开启CSRF表单防护

    1. 验证 HTTP Referer 字段:检查 Referer 字段是否来自合法的域名。 2. 在请求地址中添加 token 并验证:在请求地址中添加一个随机数 token,並在服务器端验证该 token 是否正确。 3. 在 HTTP 头中自定义属性并验证...

    IE BHO插件,修改referer

    在本例中,我们关注的是一个特定的BHO插件,它的主要功能是修改HTTP请求头中的`Referer`字段。 `Referer`头字段是HTTP协议中的一部分,它包含了用户从哪个URL点击链接来到当前页面的信息。这对于网站分析用户来源、...

    php 伪造IP和HTTP-REFERER的方法

    ### PHP 伪造IP和HTTP-REFERER的方法 #### 背景介绍 在网络环境中,IP地址和HTTP_REFERER(HTTP-REFERER)是两种常见的用于跟踪和识别用户请求的数据。其中,IP地址通常用来标识网络中的设备;而HTTP_REFERER则记录...

    http协议介绍

    如果Referer字段的值以"http://localhost/Myphp/http/"开头,说明请求来源于预期的网站,否则将重定向到警告页面。这种方法可以防止其他网站未经许可引用或盗取网站资源。 然而,HTTP_REFERER字段并非总是可靠,...

    java 防盗链详解及解决办法

    Http Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。 Java 解决防盗链 我们可以设置一个过滤器,...

    第十一节 HTTP头中的SQL注入-01

    HTTP头包含了诸如User-Agent、Referer等信息,这些信息通常用于跟踪用户浏览器类型、来源页面等。然而,如果开发者没有正确地处理这些头信息,攻击者可以构造特殊的HTTP头来执行恶意的SQL语句。例如,User-Agent和...

Global site tag (gtag.js) - Google Analytics