- 浏览: 864152 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
什么是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>
这方面的文章网上很多,参考:
* Apache 下防止盗链的解决办法
* Apache的环境变量设置
* 配置 Apache 实现禁止图片盗链
不要使用Rerferer的地方
不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信。
如果你想限制用户必须从某个入口页面访问的话,与其使用Referer,不如使用session,在入口页面写入session,然后在其他页面检查,如果用户没有访问过入口页面,那么对应的session就不存在,参见这里的讨论。不过和上面说的一样,也不要过于相信这种方式的“验证”结果。
个人感觉现在Rerferer除了用在防盗链,其他用途最多的就是访问统计,比如统计用户都是从哪里的链接访问过来的等等。
简言之,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>
这方面的文章网上很多,参考:
* Apache 下防止盗链的解决办法
* Apache的环境变量设置
* 配置 Apache 实现禁止图片盗链
不要使用Rerferer的地方
不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信。
如果你想限制用户必须从某个入口页面访问的话,与其使用Referer,不如使用session,在入口页面写入session,然后在其他页面检查,如果用户没有访问过入口页面,那么对应的session就不存在,参见这里的讨论。不过和上面说的一样,也不要过于相信这种方式的“验证”结果。
个人感觉现在Rerferer除了用在防盗链,其他用途最多的就是访问统计,比如统计用户都是从哪里的链接访问过来的等等。
发表评论
-
深入理解HTTP Session
2010-05-23 14:21 1204session在web开发中是一个 ... -
Apache和Tomcat的区别
2010-05-12 13:47 922Apache官方网站:http://www ... -
SGML
2010-05-11 08:12 1077SGML SGML(Standard Generali ... -
cookie
2010-01-26 16:33 1208当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set ... -
Jetty 源码分析
2009-12-14 19:34 2572一、 总括 你了 ... -
用Java实现断点续传(HTTP)
2009-12-11 11:20 1111用Java实现断点续传(HTTP) (一)断点续传的原 ... -
什么是Jetty?
2009-12-11 11:18 1877作者: 来源:www.matrix ... -
HttpClient入门教程
2009-12-11 10:39 1218一般的情况下我们都是使用IE或者Navigator浏览器来访 ... -
forward与sendRedirect区别
2009-12-09 13:59 12901.RequestDispatcher.forward() ... -
CSP开发流程
2009-11-30 21:48 2717当前,国内许多科研单位 ... -
HTML特殊符号对照表
2009-09-14 16:50 1135特殊符号 命名实体 十进制编码 ... -
安装thttpd的手册
2009-08-24 14:29 3246本手册是在新装的NetBSD上安装的。 (1) ftp上 ... -
thttpd
2009-08-24 11:22 25971 引言 随着微处理器技术、计算机网络技术的进步,基 ... -
使用XMLHTTP Request Object获取服务器数据
2009-08-08 12:20 1091在Web客户端使用xmlhttp对象,可以十分方便的和服 ... -
XMLHTTP---介绍
2009-08-08 12:16 938MSXML中提供了Microsoft.XMLH ... -
IIS环境下快速安装、配置和调试PHP5.2.0
2009-07-14 22:00 1451一,在哪里获得PHP 打开PHP官方网站的下载页:htt ... -
LAMP 技术简介
2009-07-14 11:22 2300本教程将探究 Linux-Apache-MySQL-PHP(也 ... -
JSP中的pageEncoding和contentType属性
2009-07-09 16:07 945关于JSP页面中的pageEnco ... -
prototype.js相关
2009-07-09 12:40 934prototype.js是什么? 万一你没有使用过大名鼎鼎的 ... -
select动态添加options操作
2009-07-02 09:20 1558<select id="ddlResour ...
相关推荐
服务器可以根据Referer值来判断请求是否来自合法的域名,如果不相关则不执行操作。 二、Referer防御代码编写 在PHP中,可以使用 `$_SERVER['HTTP_REFERER']` 获取页面提交请求中的Referer值。例如: ```php if ...
### PHP 伪造IP和HTTP-REFERER的方法 #### 背景介绍 在网络环境中,IP地址和HTTP_REFERER(HTTP-REFERER)是两种常见的用于跟踪和识别用户请求的数据。其中,IP地址通常用来标识网络中的设备;而HTTP_REFERER则记录...
- default: 使用浏览器默认行为,这通常与当前页面的协议有关。 - always: 总是发送完整的referrer信息。 举例来说,如果希望当前页面中的所有请求都不发送referrer,可以使用如下元标签: ```html ``` 如果希望...
标题中的“通过修改referer下载文件的方法”指的是在HTTP请求中,通过设置请求头中的`Referer`字段来伪装来源页面,从而实现特定的文件下载需求。`Referer`头通常用于服务器追踪用户从哪个页面访问当前请求的资源,...
综上所述,突破基于HTTP_REFERER的防盗链措施涉及到对HTTP请求头的修改,以及对PHP相关函数和配置的深入理解。需要注意的是,虽然技术上可以实现突破防盗链,但在实际应用中应该尊重网站的版权和资源使用协议,以免...
防盗链主要是通过检查HTTP请求头中的`Referer`字段来实现的。当用户从一个外部链接访问网站资源时,浏览器通常会在请求头中携带`Referer`字段,表明是从哪个页面发起的请求。如果`Referer`不在允许的列表内,网站...
本文通过实例讲解了如何在PHP中伪造HTTP_REFERER,并阐述了相关的技巧和注意事项,同时提供了防御这类攻击的方法。 首先,我们来了解HTTP_REFERER的含义。HTTP_REFERER是HTTP协议中的一个头部字段,它记录了用户...
具体来说,需要前往`http://svn.referer.cn/referer_lite/package/`下载一个名为`referer_lite.rar`的压缩包。这个压缩包包含了所有必需的文件和配置脚本。 ##### 第二步:上传与配置 解压下载的压缩包之后,将其中...
有关引荐来源标头的更多信息,请参见https://en.wikipedia.org/wiki/HTTP_referer。此扩展使用AngularJS和URI.js。 两者的许可证如下所示:AngularJS:MIT许可证版权所有(c)2010-2016 Google,Inc. http://angular
如果请求不包含列入白名单的Host / Referer标头,则host-validation将以403 Forbidden HTTP错误响应。 DNS重新绑定是一个精明的漏洞利用,多年来一直没有得到应有的重视。 因此,由于开发人员缺乏有关攻击的知识,...
在使用 cURL 设置自定义 Referer 时,开发者需要了解 cURL 相关的选项设置。CURLOPT_HTTPHEADER 选项允许开发者指定一个数组,用以自定义 HTTP 头。要设置自定义的 Referer,需要在这个数组中加入 'Referer' 键值对...
至于压缩包文件`noreferrer-master`,可能包含了一个关于如何在项目中实现和使用`noreferrer`属性的示例代码库或教程,包括但不限于JavaScript、HTML、CSS等前端技术,也可能涉及服务器端的相关处理。为了深入学习,...
下面将详细介绍JSP中如何获取HTTP请求头信息及其相关的知识点。 #### 一、HTTP请求头简介 HTTP请求头(Request Headers)是HTTP请求的一部分,它包含了客户端向服务器发送的元数据。这些元数据可以帮助服务器更好...
今天,我们详细介绍了 Android Webview 加载网页时发送 HTTP 头信息的相关知识点,包括 Referer 头信息和 UserAgent 头信息。我们也学习了如何使用 loadUrl 方法和 extraHeaders 参数来发送 HTTP 头信息。在实际开发...
本篇文章将详细介绍如何利用PHP的HTTP_REFERER头信息进行条件性的页面跳转,并探讨相关的编程实践。 HTTP_REFERER是HTTP协议头部的一个字段,它包含了用户从哪个URL访问当前页面的信息。在某些场景下,我们可以根据...
例如,如果 Referer 头中包含了 "example.com",那么可以推断用户是从 example.com 网站来的,此时 Liferay 可以据此显示与 example.com 合作伙伴相关的广告或内容,提升用户体验的同时,也可能提高合作效果。...
文章中首先介绍了一些关于Nginx配置的基本知识,然后重点讲解了如何通过修改配置文件来设置防盗链,最后补充了有关referer指令的一些语法和参数,帮助读者更好地理解和应用。 Nginx是一个高性能的HTTP和反向代理...
1. 检查Referer:通过PHP的$_SERVER全局变量获取HTTP头信息,尤其是'Referer'字段。如果Referer字段为空或者不包含预期的域名,可以阻止图片显示。 ```php $referer = $_SERVER['HTTP_REFERER']; $allowed_domains ...
有关引荐来源标头的更多信息,请参见https://en.wikipedia.org/wiki/HTTP_referer。此扩展使用AngularJS和URI.js。 两者的许可证如下所示:AngularJS:MIT许可证版权所有(c)2010-2016 Google,Inc. ...
$referer = $_SERVER['HTTP_REFERER']; if (strpos($referer, 'baidu.com') !== false) { $params = parse_url($referer, PHP_URL_QUERY); parse_str($params, $query); $keyword = isset($query['wd']) ? $query...