原文出处:http://www.cnblogs.com/devilfree/archive/2012/09/11/2680914.html

总结一下今天学习防盗链Filter的一些知识点:

防盗链要实现的是这样一种效果:比如说其他的网站引用本网站的图片资源,将会显示一个错误图片,只有是本网站内的网页引用时候,图片才可以正常显示。这种应该是比较常见的,例如经常逛论坛的人会看到别人贴的图显示出来是一个错误图片,如百度图片不可以外链等,用到的就是这个Filter。



    首先说下Filter的工作区域是在客户端请求request抵达Servlet之前和服务器响应response在从Servlet抵达客户端浏览器之前。即FilterChain起到了一个过滤网的作用。所以在显示图片之前,先来验证图片的来源,再决定要不要正常显示该图片。

那么如何判定图片的来源呢?这里涉及到了一个知识点:referer

    什么是referer呢?HTTP协议可能学网络的人更熟悉一点,HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的,比如说如果我博客上面有友情链接到朋友的博客,那么就可以从referer中统计出来一段时间内有多少点击量是从我的博客链接到朋友的博客。

Java中获取referer的方法是:request.getHeader("referer")

判断盗链:

String referer = request.getHeader("referer");

  //getServerName() 返回网站的域名
if(referer==null || !referer.contains(request.getServerName())){
//转到一个错误的图片
request.getRequestDispatcher("/error.gif").forward(request.response);
}else{
chain.doFilter(request,response);
}

request.getHeader("referer")可用的情况:

1.<a href="">

2.表单提交



不可用的情况:

1.从收藏夹链接

2.自定义地址

3.浏览器直接输入

...

下面是一个对referer和getServerName()的小测试

新建两个jsp页面,分别命名为srcFilter.jsp 和 testFilter.jsp

srcFilter做一个链接到testFilter.jsp,显示testFilter页面的referer和serverName

srcFilter:

1 <a href="testFilter.jsp">点击</a>

testFilter:

1 <%
2 String referer = request.getHeader("referer");
3 String serverName = request.getServerName();
4 %>
5 <div>serverName : <%=serverName %></div>
6 <div>referer : <%=referer %></div>

点击链接后跳转到testFilter页面显示结果为:

serverName : localhost
referer : http://localhost:8080/filter/srcFilter.jsp

防盗链[referer]的更多相关文章

  1. Web_0001:关于阿里云防盗链Referer,CDN加速,OSS自定义域名的操作

    1,防盗链Referer 防止非法域名访问 OSS 数据,设置白名单: 允许为空 : 表示当从浏览器直接打开OSS资源时有效. 示例说明: 我在www.sojson.com里有一个www.baidu. ...

  2. Nginx实现图片防盗链(referer指令)

    什么是图片盗链   每张图片在浏览器中都有对应的图片地址,在浏览器中输入这个地址是可以直接拿到图片. 图片盗链,就是盗用者在他的站上需要显示我们的图片,他没有把图片拿下来,放到他的服务器上, 而是直接 ...

  3. HTTP 笔记与总结(6)referer 头与防盗链

    在百度贴吧(或 QQ 空间等)中找到一张图片,复制图片地址,在站外通过 img src 引用,会发现: 此外,在一些统计软件中,统计访客的来路(直接访问.外部链接.搜索引擎),都用到了 HTTP 协议 ...

  4. PHP伪造referer突破防盗链

    php伪造referer实例代码,主要用于一些突破防盗链. 可以从这个例子中发展出很多的应用.比如隐藏真实的URL地址……嘿嘿,具体的就自己分析去吧 这里新建一个文件file.php.后面的参数就是需 ...

  5. http请求之referer头与防盗链

    在网页中的占用大流量的信息可以写成这个信息在网络上的url位置,这样就会减少本网站的流量,但是其他网站也 不会随意让你使用人家的资源,因为这样的情对人家的网站没有好处,会增加人家网站的流量,所以要防止 ...

  6. php 通过referer防盗链(以图片为例)

    1.在网页里访问站外图片时,服务器如何知道是在站外引用的呢? (1)对比本服务器请求与跨服务器请求 图一——本服务器请求 图二——显示盗链的referer信息 通过对比也就知道referer显示的是引 ...

  7. referer htttp headers 统计信息 防盗链

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

  8. 什么是防盗链设置中的空Referer

    设置防盗链时候指明和不指明空Referer的差别及实现后的效果? 什么是Referer? 这里的 Referer 指的是HTTP头部的一个字段,也称为HTTP来源地址(HTTP Referer).用来 ...

  9. Referer图片防盗链

    前几天讲了<nginx下载防盗链>,今天继续说下图片防盗链. 他们两个使用的指令不同,前者使用secure link,并且需要程序配合,但是效果非常好;后者不需要程序配合,根据图片来源来实 ...

随机推荐

  1. 自学Aruba1.1-Aruba体系结构-产品线

    点击返回:自学Aruba之路Aruba产品线 IP switches: 1500.2500.3500 Controllers:7200 .70x0 Series.7005 Meridian:基于ACE ...

  2. Excel Microsoft.Jet.OLEDB.4.0 外部数据库驱动程序中(1)的意外错误

    昨天更新系统的bug,据说是微软要搞事情啊 删除以下更新就行: win7                          KB4041678  KB4041681 SERVER 2008 R2 KB ...

  3. python之Character string

    1.python字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串,l Python不支持单字符类型,单字符也在Python也是作为一个字符串使用. ...

  4. webpack编译流程漫谈

    前言 weback在web构建工具的激烈竞争中逐渐脱引而出. 无论是编译速度.报错提示.可扩展性等都给前端开发者耳目一新的感觉.本篇文章是个人对webpack的一点小研究总结. webpack在开发者 ...

  5. [bzoj3673] 可持久化并查集 by zky

    总感觉到现在才来写这题有点奇怪. 并查集如果按秩合并的话,每次合并只会修改一个点的父亲. 用可持久化线段树来实现可持久化数组就行了.. 然而我写的是按子树大小合并..结果比按秩合并慢了一点>_& ...

  6. '<<' '|' '>>' 等位运算符 课本祥解

    a<<1   相当于a*2     a>>1    相当于a/2   a<<|1   相当于a*2+1 一些算法用得到.

  7. RAID 详解

    一.什么是RAID 磁盘阵列全名是『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列. RAID 可以透过一个技术(软件或 ...

  8. 在vue-cli项目中使用echarts

    这个示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --regist ...

  9. Docker版本升级至17.03

    2017/3/3,Docker官方发表了一篇博客,Docker版本从1.13.*直接跳入17.03,该版本的意思是17年3月.同时,还声明了Docker以后会以CE(Community Edition ...

  10. html button 点击链接

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...