今天我们来聊聊Java防盗链,多说无用,直接上应用案例。
这里所用的工具是报表软件FineReport,搭配有决策系统(一个web前端展示系统,主要用于权限控制),可以采用java防盗链的方式来实现页面权限。
浏览器中直接输入报表URL的时候,它的头文件是空的,因此,可以在访问的时候做两个判断:头文件是否为空以及以什么页面进行跳转,如果不符合跳到错误页面即可。
什么是Referer?
这里的 Referer 指的是HTTP头部的一个字段,也称为HTTP来源地址(HTTP Referer),用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
什么是空Referer,什么时候会出现空Referer?
首先,我们对空Referer的定义为,Referer 头部的内容为空,或者,一个HTTP请求中根本不包含Referer头部。
那么什么时候HTTP请求会不包含Referer字段呢?根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。
比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。
在防盗链设置中,允许空Referer和不允许空Referer有什么区别?
在防盗链中,如果允许包含空的Referer,那么通过浏览器地址栏直接访问该资源URL是可以访问到的;
但如果不允许包含空的Referer,那么通过浏览器直接访问也是被禁止的。
操作步骤
1、添加class文件
编写一个类文件,用来判断头文件是否为空,代码如下:
package com.fr.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Dodo implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; String referer = req.getHeader("referer"); //下面的IP地址是正常页面请求 if(null != referer && (referer.trim().startsWith("http://localhost:8033")||referer.trim().startsWith("http://www.finereporthelp.com/test/hello.html"))){ System.out.println("正常页面请求"+referer); chain.doFilter(req, resp); //下面的就是出现不是正常页面请求的时候跳转 }else{ System.out.println("盗链"+referer); req.getRequestDispatcher("/LdapLogin.jsp").forward(req, resp); } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
将Dodo.java编译成class文件,并放在%TOMCAT_HOME%\WebReport\WEB-INF\classes\com\fr\test目录下。
2、修改web.xml文件
打开%TOMCAT_HOME%\webapps\WebReport\WEB-INF下的web.xml文件,配置一个过滤filter,在出现ReportServer的时候执行过滤,代码如下:
<filter> <filter-name>AuthFilter</filter-name> <filter-class>com.fr.test.Dodo</filter-class></filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/ReportServer</url-pattern> </filter-mapping>
两步就可以搞定,如果属于盗链,则跳转至上述的LdapLogin错误页面,这里没有LdapLoign页面,所以直接跳转404。如果还想实现数据权限,则可以通过单点登录或者session注入的方式。
效果测试
准备两个html文件
假设hello.html是正确的网址
<html> <body> <p>测试</p> <a href="http://localhost:8033/WebReport/ReportServer?reportlet=demo%2Fnewchart%2Fothers%2FLogarithmic_axis.cpt&op=write">防盗链测试</a> </body> <html>
假设steal.html是盗链的网址
<html> <body> <p>测试,错误的链接地址</p> <a href="http://localhost:8033/WebReport/ReportServer?reportlet=demo%2Fnewchart%2Fothers%2FLogarithmic_axis.cpt&op=write">防盗链测试</a> </body> </html>
情况一
通过hello.html跳转,跳转链接正确,即referer不为空且正确
情况二
通过steal.html跳转,跳转链接错误,即referer不为空且错误
情况三
直接访问URL地址,即referer为空
相关推荐
防盗链的概念是指在自己的服务器上,通过技术手段将其他网站的内容(比如一些音乐、图片、软件的下载地址)放置在自己的网站中,通过这种方法盗取其他网站的空间和流量。防盗链是一种不道德的行为,会对原网站造成很...
Java防盗链技术在报表系统中的应用主要涉及到网络安全和权限控制,尤其是对于在线报表工具如FineReport而言,确保数据安全和防止非法访问至关重要。本文将详细介绍如何利用Java实现防盗链功能,并提供一个具体的应用...
HttpURLConnection+jsoup防盗链 {"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661...
在IT行业中,Java爬虫是一种常见的技术,用于自动抓取网页信息,包括文本、图片等。这个"Java爬虫小例子"项目展示了如何利用Java来爬取小型网站,特别是那些有防盗链保护的图片资源。防盗链是网站为了防止其他网站...
首先,我们来看看如何在Java中实现防盗链功能。核心思路是检查请求的来源,判断是否来自合法的源。一种常见的方式是检查`Referer`头,这是浏览器在发送HTTP请求时附带的上一个页面的URL。如果`Referer`指向的不是...
图片防盗链.java图片防盗链.java图片防盗链.java
标题中的“文件防盗链的实现(射雕英雄java传系列)”指的是通过编程技术来防止他人未经许可盗用网站上的文件,如图片、音频或视频等。在这个特定的上下文中,我们可能关注的是Java语言实现的防盗链技术。防盗链是为了...
本篇文章将深入探讨Java防盗链filter的工作原理、实现方式以及其在实际应用中的重要性。 首先,理解什么是"filter"。在Java Web开发中,Filter是Servlet API的一部分,它允许开发者在请求到达目标Servlet之前或之后...
在互联网上,图片防盗链是一种常见的保护措施,用于防止他人未经许可直接引用网站上的图片资源。这导致了图片采集过程中可能会遇到图片无法显示的问题。本文将深入探讨如何使用PHP来破解防盗链,以便在采集图片时能...
《RealServer防盗链插件(UUReal防盗链)详解及应用》 在互联网内容分发领域,服务器的安全和资源管理至关重要。RealServer防盗链插件,即UUReal防盗链,是一种针对RealServer流媒体服务器而设计的专业防盗链解决...
### 如何快速解决图片防盗链问题 在互联网时代,内容创作和分享变得异常便捷,但同时也带来了版权保护的问题。...这种方法虽然看似简单,但在实际应用中却非常实用,值得推荐给所有需要处理图片防盗链问题的人。
下面我们将详细探讨如何在IIS7.0和7.5中配置防盗链。 一、IIS7.0配置防盗链 1. **开启URL重写模块**:首先,确保你的IIS服务器已经安装了URL重写模块。如果没有,可以通过Web平台安装程序(Web Platform Installer...
### 知识点详解 #### 一、图片防盗链机制的理解与原理 1. **防盗链的概念**:防盗链(Hotlink Protection)是指网站为了防止...但需要注意的是,在实际应用过程中还需综合考虑各种因素,制定合理的策略和技术方案。
标题"IIS防盗链附带防盗链效果 for phpwind.rar"涉及到的是互联网服务器技术中的一个关键概念,即IIS(Internet Information Services)防盗链功能,并且是针对PHPWind论坛系统的。PHPWind是一款流行的开源社区建站...
防盗链完美解决方案 防盗链完美解决方案,提供给你一些安全的方法。
Asp.net防盗链实例源码 通过设置web.config中的域名即可控制哪些域名是允许的,设置是否直接下载、是否允许盗链 <!--是否直接下载--> <!--是否允许盗链--> <!--多个允许的访问来源用半角的","分割--> ...
在本文中,我们将深入探讨如何使用C# MVC中的HttpModule实现网站防盗链功能以及优化图片的304缓存机制。HttpModule是ASP.NET框架的一部分,它可以捕获HTTP请求并在处理之前或之后进行操作,因此它是实现这些功能的...
在Apache的配置文件中,找到或者创建一个`.htaccess`文件,然后在这个文件中添加以下防盗链规则: ```apacheconf RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ # 排除空引用 RewriteCond %{HTTP_REFERER} !^...
下面我们将深入探讨防盗链插件的工作原理、实现方式以及其在不同编程语言中的应用。 1. 工作原理: 流媒体服务器防盗链插件主要通过验证请求来源的合法性来实现其功能。当用户试图访问一个流媒体文件时,服务器会...