原文出处: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. Linux常见命令(权限)

    创建a.txt和b.txt文件,将他们设为其拥有者和所在组可写入,但其他以外的人则不可写入:chmod ug+w,o-w a.txt b.txt 创建c.txt文件所有人都可以写和执行chmod a= ...

  2. centos下安装最新版本git(通过master分支下载最新版)

    centos6.7下安装最新版本git 本文参考:http://www.01happy.com/centos-install-latest-git/ 按照原博主所提供的思路安装可能会出现下列问题 解决 ...

  3. Android之Bmob移动后端云服务器

    源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己 ...

  4. cloudera-manager所有服务提示时钟偏差问题解决办法

    今天新部署Cloudera Manager Hadoop(CDH)集群 发现祖国江山一片红,所有服务都报时钟偏差 1.查看各服务器,时钟是否正确 发现并无问题 2.查看CDH主机配置----主机时钟偏 ...

  5. 微信跳一跳辅助Demo

    [原创] 前几天没事干看别人一直在玩微信上线的那一个跳一跳小游戏,玩着玩着老是掉下去,闲着没事呗 就想了想做一个辅助程序的呗.不过先做的手动版的.自动版的有点麻烦.就不发了.用的Java写的,也就一个 ...

  6. [转]Python 资源大全中文版

    摘自:https://github.com/jobbole/awesome-python-cn 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesom ...

  7. [翻译]在 .NET Core 中的并发编程

    原文地址:http://www.dotnetcurry.com/dotnet/1360/concurrent-programming-dotnet-core 今天我们购买的每台电脑都有一个多核心的 C ...

  8. bzoj:2595: [Wc2008]游览计划

    Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个景点:否则表示控制该方块至少需要的志愿者数 ...

  9. hihoCoder 1039:字符消除(字符串处理)

    #1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...

  10. Codeforces Round #411 (Div. 2)(A,B,C,D 四水题)

    A. Fake NP time limit per test:1 second memory limit per test:256 megabytes input:standard input out ...