6、springboot-防止xxs攻击
疫情大数据平台是一个公益的项目,但很可能被网络上大量的扫描器扫描,并有可能收到脚本的攻击,而进行防御就是很重要的,可以有效的避免我们被攻击。
本篇主要讲述防止xss攻击部分
定义:
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
原理:
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,与之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
1、Springboot XSS过滤插件(mica-xss)
mica-xss组件说明:
1、对表单绑定的字符串类型进行 xss 处理。
2、对 json 字符串数据进行 xss 处理。
3、提供路由和控制器方法级别的放行规则。
配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcTCrAlU-1653486656214)(9、springboot-防止xss攻击.assets/1234sad.png)]
引入即可
<dependency><groupId>net.dreamlu</groupId><artifactId>mica-xss</artifactId><version>2.0.9-GA</version></dependency>
<dependency><groupId>net.dreamlu</groupId><artifactId>mica-core</artifactId><version>2.1.0-GA</version>
</dependency>
这样就可以了,但本篇主要讲述手动构造的方式进行
过程主要是三步:包装request->创建过滤器->添加过滤器
首先创建包装request的类,主要是对请求头和请求体中的有效字符进行逐个过滤,将有攻击性的字符进行逐一替换,让其在不失去原有功能的情况下,失去攻击性,是通过装饰模式补充父类HttpServletRequestWrapper让xss的更新直接调配可以加入
public class Xss extends HttpServletRequestWrapper {public XssHttpServletRequestWrapper(HttpServletRequest request) {super(request);}@Overridepublic String[] getParameterValues(String parameter) {String[] values = super.getParameterValues(parameter);if (values==null) {return null;}int count = values.length;String[] encodedValues = new String[count];for (int i = 0; i < count; i++) {encodedValues[i] = cleanXSS(values[i]);}return encodedValues;}@Overridepublic String getParameter(String parameter) {String value = super.getParameter(parameter);if (value != null) {return cleanXSS(value);}return null;}@Overridepublic String getHeader(String name) {String value = super.getHeader(name);if (value == null)return null;return cleanXSS(value);}private static String cleanXSS(String value) {value = value.replaceAll("<", "<").replaceAll(">", ">");value = value.replaceAll("%3C", "<").replaceAll("%3E", ">");value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");value = value.replaceAll("%28", "(").replaceAll("%29", ")");value = value.replaceAll("'", "'");value = value.replaceAll("eval\\((.*)\\)", "");value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");value = value.replaceAll("script", "");return value;}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream bais = new ByteArrayInputStream(inputHandlers(super.getInputStream ()).getBytes ());return new ServletInputStream() {@Overridepublic int read() throws IOException {return bais.read();}@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) { }};}public String inputHandlers(ServletInputStream servletInputStream){StringBuilder sb = new StringBuilder();BufferedReader reader = null;try {reader = new BufferedReader(new InputStreamReader(servletInputStream, Charset.forName("UTF-8")));String line = "";while ((line = reader.readLine()) != null) {sb.append(line);}} catch (IOException e) {e.printStackTrace();} finally {if (servletInputStream != null) {try {servletInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}return cleanXSS(sb.toString ());}}
其次是创建过滤器调用上面的过滤器的创建调用和销毁
filterChain.doFilter在通过创建调用过滤器的同时进行过滤器的传递
@WebFilter(filterName="myXssFilter", urlPatterns="/*")
public class MyXss implements Filter {FilterConfig filterConfig = null;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");this.filterConfig = filterConfig;}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("执行过滤操作");filterChain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest)servletRequest), servletResponse);}@Overridepublic void destroy() {System.out.println("过滤器销毁");this.filterConfig = null;}}
最后是添加过滤器,在程序入口添加注解 @ServletComponentScan即可
6、springboot-防止xxs攻击相关推荐
- springboot防止XSS攻击和sql注入
文章目录 1. XSS跨站脚本攻击 ①:XSS漏洞介绍 ②:XSS漏洞分类 ③:防护建议 2. SQL注入攻击 ①:SQL注入漏洞介绍 ②:防护建议 3. SpringBoot中如何防止XSS攻击和s ...
- CSRF攻击与XXS攻击
一.CSRF 概念 CSRF(Cross-site request forgery)--跨站请求伪造.也被称为"One Click Attack"或者"Session R ...
- SpringBoot防XSS攻击
1 . pom中增加依赖 <!-- xss过滤组件 --> <dependency><groupId>org.jsoup</groupId><ar ...
- SpringBoot 防止XSS攻击和SQL攻击拦截器(Filter)
什么是SQL攻击.什么是XSS攻击 SQL 攻击:把SQL命令插入到Web表单并提交,欺骗服务器执行恶意的SQL命令. XSS 攻击:向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏 ...
- SpringBoot2.0系列教程(十三)Springboot防止XSS攻击
Hello大家好,本章我们添加防止XSS攻击功能 .有问题可以加我VX:Mrchuchen. 一:什么是XSS XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将 ...
- SpringBoot 抵御XSS攻击
抵御XSS攻击 1.XSS攻击的危害 2.抵御XSS的实现 1.导入Hutool的依赖库 2.定义请求包装类 3.测试 1.XSS攻击的危害 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙 ...
- springboot-过滤器与xxs攻击防御
过滤器解决XXS(脚本注入) 1.实现Filter接口 public class XssFilter implements Filter {@Overridepublic void doFilter( ...
- web安全---xxs攻击
xss攻击是一种跨站脚本攻击,黑客通过在页面中写入恶意脚本,实现脚本攻击. xss攻击的分类 1.反射型跨站攻击 个人理解:就是你在搜索框中写入<script>alent("xs ...
- 一次真实的XXS攻击
这是一个真实的事,一家比较大的公司举办的一个全国性的投票,然而,页面确实写得很烂,做假太容易. 首先,找到投票按钮的源代码: 这个"tp"类就是投票事件的定位关键字. 然后,打开s ...
最新文章
- 查看mysql日志文件大小和数据库大小
- php 上传pdf文件损坏,php – 强制下载PDF文件,损坏文件
- leetcode 189. 旋转数组
- 不容按钮、下拉框 执行同一个函数或者同一种函数的用法
- JavaEE各种Javadoc的下载
- Git命令之查看及设置用户名邮箱
- axure 发布 主页_【最新实习发布!】滴滴后台/数据产品经理实习生
- 在MacOSX的Vmare Fusion中添加虚拟软驱和制作虚拟软盘
- Round 2—算法的复杂度
- centos 6.5 thinkpad trackpoint 中间键 滚动设置
- 给出直角三角形斜边,求有多少三角形符合要求
- 如何学习有限元分析 有限元分析学习心得
- Fluent验证案例05:管道中的泊肃叶流动
- quartus ii 增量编译
- PC机插入麦克风后没有说话没有声音
- 502 bad gateway是什么意思?502 bad gateway怎么解决!
- AI是一场革命,不要笑,我是认真的。
- 小米7.0系统设备一键激活Xposed框架的教程
- 学计算机但是对电脑不熟,关于计算机学习心得感悟
- 【谷歌插件】Fatkun图片批量下载
热门文章
- GBase 8c 权限说明
- office2021官方正版镜像
- 中国各省份名字的由来
- Linux中防火墙firewalld
- Android Studio-Didn't find class XXX on path: DexPathList [zip file /data/xxx/base.apk]解决方法
- TCP/IP网络编程_第6章基于UDP的服务器端/客户端
- 丢手帕问题 java_java入门小程序—17人游戏(丢手绢问题) | 学步园
- python自动填写腾讯文档_腾讯文档自动填充工具(工具),填写
- 【VBA编程】Sub过程
- 习题4-5 换硬币 (20分) 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?