一、XSS攻击
百度百科.
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
二、导入依赖库
因为Hutool工具包带有XSS转义的工具类,所以我们要导入Hutool,然后利用servlet规范提供的请求包装类,定义数据转义功能。
1 | html复制代码<dependency> |
三、请求定义包装类
我们平时写Web项目遇到的HttpservletRequest,它其实是个接口。如果我们想要重新定义请求类,扩展这个接口是最不应该的。因为HttpservletRequest接口中抽象方法太多了,我们逐一实现起来太耗费时间。所以我们应该挑选一个简单一点的自定义请求类的方式。那就是继承HttpServletRequestwrapper父类。
JavaEE只是一个标准,具体的实现由各家应用服务器厂商来完成。比如说Tomcat在实现servlet规范的时候,就自定义了HttpservletRequest接口的实现类。同时JavaEE规范还定义了HttpServletRequestwrapper,这个类是请求类的包装类,用上了装饰器模式。不得不说这里用到的设计模式真的非常棒,无论各家应用服务器厂商怎么去实现HttpServletRequest接口,用户想要自定义请求,只需要继承HttpServletRequestwrapper,对应覆盖某个方法即可,然后把请求传入请求包装类,装饰器模式就会替代请求对象中对应的某个方法。用户的代码和服务器厂商的代码完全解耦,我们不用关心HttpServletRequest接口是怎么实现的,借助于包装类我们可以随意修改请求中的方法。
1 | java复制代码 |
四、创建过滤器,把所用请求对象传入包装类
为了让刚刚定义的包装类生效,我们还要在 com.example .emos.wx.config.xss中创建xssFilter过滤器。过滤器拦截所有请求,然后把请求传入包装类,这样包装类就能覆盖所有请求的参数方法,用户从请求中获得数据,全都经过转义。
1 | java复制代码package com.example.emos.wx.config.xss; |
五、给主类添加注解
给SpringBoot主类添加@servletcomponentscan注解。
六、测试拦截XSS脚本
1 | xml复制代码我是通过传入一段<script>alert("xss脚本攻击")</script>脚本, |
测试结果:
如上图所述,参数中的标签被过滤掉,返回的是去掉标签的字符!
本文转载自: 掘金