SpringBoot如何使用mica-xss防止Xss攻击

 更新时间:2024年01月12日 15:49:35   作者:龙域、白泽  
这篇文章主要介绍了SpringBoot如何使用mica-xss防止Xss攻击问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Xss攻击介绍

XSS攻击又称 跨站脚本攻击,通常指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

通俗的讲就是通过web应用可输入参数,输入script脚本实现xss攻击。

主要防御措施是通过web页面关键字特殊字符过滤。

XSS攻击的原理:攻击者会在web页面中插入一些恶意的script代码。

当用户浏览该页面的时候,那么嵌套在该页面的代码就会执行,因此会达到攻击用户的目的。

那根据这个原理,实际上如果没有做任何的限制,有心人就可以为所欲为了。

可以在里面嵌入一些关键代码,把你的信息拿走。确实是个很严重的问题。

需求概述

在常见的开发中需要注意xss跨站脚本的攻击,需要对参数关键字做一些校验与过滤,避免将script脚本存入数据库或者造成数据泄漏等安全问题。

实例

在前端form表单的输入框中,用户没有正常输入,而是输入了一段代码:

</input><img src=1 onerror=alert1> 

这个正常保存没有问题。

问题出在了列表查询的时候,上面的代码就生效了,由于图片的地址乱写的,所以这个alert就起作用了来看图。

XSS攻击分类

  • 反射型 XSS:通过将XSS攻击代码放在请求URL上,将其作为输入提交到服务器端。当服务器端解析提交后,XSS代码会随着响应内容一起传回浏览器,最后浏览器解析并执行XSS代码。由于整个过程像一个反射,因此称为反射型XSS。如发起如下请求:https://www.域名.com/index.php?xss=<script>alter(xss攻击)</script>。
  • 存储型 XSS:与反射型XSS“相似”,但不同的是提交的XSS代码会被存储在服务器端,当下一次请求该页面时,不用提交XSS代码,也会触发XSS攻击。例如当进行用户注册时,用户提交一条包含XSS代码的注册信息到服务器端,当用户查看个人信息时候,那些个人信息就会被浏览器当成正常的HTML和JS解析执行,从而触发了XSS攻击。
  • DOM XSS:与反射型和存储型XSS不同之处在于,DOM XSS不需要服务器的参与,通过浏览器的DOM解析即可触发XSS攻击,避免了服务器端的信息检验和字符过滤。如发起如下请求:https://www.域名.com/index.html#alert(xss攻击)

mica-xss

介绍

Mica,Spring Cloud 微服务开发核心包,支持 web 和 webflux。

mica-xss组件说明

  • 对表单绑定的字符串类型进行 xss 处理。
  • 对 json 字符串数据进行 xss 处理。
  • 提供路由和控制器方法级别的放行规则。

导入依赖

<dependency>
	<groupId>net.dreamlu</groupId>
	<artifactId>mica-core</artifactId>
	<version>2.0.9-GA</version>
</dependency>
<dependency>
	<groupId>net.dreamlu</groupId>
	<artifactId>mica-xss</artifactId>
	<version>2.0.9-GA</version>
</dependency>

mica-xss 配置

@XssCleanIgnore

添加注解@XssCleanIgnore跳过XSS过滤,该注解可作用于类上和方法上

import net.dreamlu.mica.xss.core.XssCleanIgnore;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@XssCleanIgnore //设置该注解 用于跳过配置的Xss 防护
@RequestMapping("/")
public class IndexController {
​
    @GetMapping("/xss")
    public String xssGet(String data){
        System.out.println(data);
        return data;
    }
}

测试

参数为:<script>alert(666)</script>

设置XSS防护

去掉注解 @XssCleanIgnore ,则data的值为空字符串

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 梳理总结Java static关键字的方法作用

    梳理总结Java static关键字的方法作用

    这篇文章主要介绍了梳理总结Java static关键字的方法作用, static 关键字可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的
    2022-06-06
  • Struts2学习教程之输入校验示例详解

    Struts2学习教程之输入校验示例详解

    这篇文章主要给大家介绍了关于Struts2学习教程之输入校验的相关资料,文中通过示例介绍的非常详细,对大家学习或者使用struts2具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Keycloak各种配置及API的使用说明

    Keycloak各种配置及API的使用说明

    这篇文章主要介绍了Keycloak各种配置及API的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理

    Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理

    ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。下面通过本文给大家介绍Java concurrency集合之ArrayBlockingQueue的相关知识,感兴趣的朋友一起看看吧
    2017-06-06
  • Java类的序列化版本唯一标识符serialVersionUID使用

    Java类的序列化版本唯一标识符serialVersionUID使用

    serialVersionUID是一个类的序列化版本唯一标识符,用于确保在反序列化过程中类的实例与序列化文件中的类版本相匹配,它在版本兼容性和安全性方面起着关键作用
    2025-01-01
  • JavaWeb文件上传开发实例

    JavaWeb文件上传开发实例

    这篇文章主要为大家详细介绍了JavaWeb文件上传开发实例,如何进行文件上传操作,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Spring中@Transactional注解关键属性和用法小结

    Spring中@Transactional注解关键属性和用法小结

    在Spring框架中,@Transactional 是一个注解,用于声明事务性的方法,它提供了一种声明式的事务管理方式,避免了在代码中直接编写事务管理相关的代码,本文给大家介绍@Transactional 注解的一些关键属性和用法,感兴趣的朋友一起看看吧
    2023-12-12
  • SpringBoot集成支付宝沙箱支付的实现示例

    SpringBoot集成支付宝沙箱支付的实现示例

    本文主要介绍了SpringBoot集成支付宝沙箱支付的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • RocketMQ生产者如何规避故障Broker方式详解

    RocketMQ生产者如何规避故障Broker方式详解

    这篇文章主要为大家介绍了RocketMQ生产者如何规避故障Broker方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java获取上月份最后一天日期8位的示例代码

    Java获取上月份最后一天日期8位的示例代码

    这篇文章主要介绍了Java获取上月份最后一天日期8位,需要的朋友可以参考下
    2022-09-09

最新评论