今天我们来聊聊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实现防盗链功能,并提供一个具体的应用...
这个项目还涉及到了Java技术,可能在后端处理、数据库连接或者与ASP的集成中有所应用。Java以其跨平台性和强大的企业级应用开发能力,常用于构建复杂的后台逻辑和服务。 此外,"毕业设计"标签意味着这是一份学生...
dancetrack0004的gt
本文由普华永道发布,详细分析了2023年全球房地产行业的并购趋势。在全球宏观经济环境变化和货币政策调整背景下,房地产并购活动有所放缓,但仍有大量资金等待入场。文中探讨了办公、工业、住宅、零售和酒店五大板块的具体情况及其面临的挑战与机遇。办公资产受利率上调影响较大,但优质资产需求仍然旺盛;工业地产在电商和供应链调整驱动下持续增长;住宅市场因利率上升导致租赁需求增加;零售业则受益于消费者回归实体店;酒店业则因旅游需求回暖而保持高位并购活动。此外,文章还提到不同区域市场的特点,如美洲、欧洲、中东和亚太地区的具体动态。
计算机二级题库(已经分类).pdf
intel pcm
汽车入门必读,深刻了解底层逻辑
计算机二级模拟试题.pdf
计算机发展和特点.pdf
基于java的图书馆管理系统毕业设计含源文件.doc
计算机汇编原理.pdf
内容概要:本文详细介绍了基于Linux平台的机器人控制系统和路径识别项目的完整设计方案。
计算机二级计算机编程题.pdf
内容概要:本文详细介绍了基于网络流量的设备识别技术,涵盖了其发展历史、TCP/IP协议的基础知识以及当前的研究进展。文章首先回顾了早期设备识别的需求和方法,指出随着物联网设备的多样化和复杂化,传统的设备识别方法已难以满足现代需求。接着探讨了高性能扫描工具的作用,强调了TCP/IP各层协议在网络流量分析中的重要性。文中还深入讨论了两种主要的设备识别方法:基于协议特征和统计特征的分类器学习,以及基于应用层数据的自动化规则生成。最后,文章指出了现有方法的优点和局限性,并展望了未来的研究方向。 适合人群:信息安全研究人员、网络管理员、物联网开发者和技术爱好者。 使用场景及目标:适用于希望深入了解设备识别技术原理及其应用场景的专业人士,旨在帮助他们掌握最新的技术和工具,以应对日益复杂的网络安全挑战。 其他说明:文章引用了两篇权威文献,提供了详尽的技术细节和案例分析,有助于读者全面理解设备识别领域的最新进展。
1. **内容概要**:x86版本汇编密码本程序基于x86汇编编写,支持增删改查。程序经x86架构优化,执行效率高、兼容性好。 2. **适用人群**:适合学习x86汇编的学生、加密技术爱好者、信息安全开发者以及逆向工程从业者。 3. **使用场景及目标**:在数据传输和存储场景下,对敏感数据加密,保障数据安全。学习者能借此深入理解汇编与加密算法,开发者可将其功能集成到项目中。 4. **其他说明**:程序基于x86架构,在其他架构使用可能需适配。使用者需具备一定汇编和加密知识,使用时应遵守法律法规,关注技术动态,适时更新程序 。
内容概要:本文档汇集了 BAT(百度、阿里巴巴、腾讯)的经典面试题目及其详细解答,涵盖了广泛的技术领域。主要内容包括 STL 容器(如 vector、Map、Set)的实现原理,洗牌算法的设计,竞赛排序问题,中位数查找算法,智能指针的实现与循环引用处理,单例模式的线程安全实现,C++ 结构体大小计算,引用与指针的区别,const 和 define 的对比,强制类型转换的区别,虚函数的工作原理,内存管理和多线程编程技巧,Linux 内存分配机制,以及各种算法设计问题(如短网址服务、网页爬虫、大数据处理等)。这些问题不仅涉及基础知识的理解,还包括实际应用场景中的优化和解决方案。 适合人群:具备一定编程基础和技术背景的研发人员,尤其是准备 BAT 技术面试的候选人。 使用场景及目标:①深入理解 C++ 编程语言特性及其标准模板库的实现细节;②掌握常见的数据结构和算法设计技巧;③熟悉操作系统层面的知识,如内存管理、进程通信等;④提高解决实际工程问题的能力,特别是在大规模数据处理方面。 其他说明:文档中的题目难度较大,旨在考察应聘者的综合能力,包括但不限于理论知识的应用、代码实现的质量、解决问题
内容概要:本文详细介绍了如何利用Carsim进行车辆动力学建模并结合Simulink实现ACC(自适应巡航控制)系统的联合仿真。文中涵盖了从环境配置、模型搭建、控制算法设计到最后的数据同步等多个方面。尤其强调了在配置过程中容易出现的问题及其解决方案,如单位制转换、采样时间同步以及PID控制器参数调优等。此外,作者分享了一些实用的经验技巧,如通过状态机实现跟车模式切换、采用抗饱和PID结构提高控制稳定性等。 适用人群:从事汽车电子控制系统开发的技术人员,尤其是对ACC系统感兴趣的工程师。 使用场景及目标:帮助开发者掌握Carsim与Simulink联合仿真的全流程,确保能够成功搭建并优化ACC控制系统,最终达到稳定可靠的跟车效果。 其他说明:文中提供了大量MATLAB/Simulink代码片段作为实例指导,有助于读者更好地理解和应用相关知识点。同时,针对可能出现的各种问题给出了详细的排查步骤和技术建议。
计算机二级VB考试_试题(真题)及详细答案.pdf
计算机仿真作业3.pdf