• 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=
    • 存储型 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 处理。
    • 提供路由和控制器方法级别的放行规则。

    导入依赖

    1. <dependency>
    2. <groupId>net.dreamlugroupId>
    3. <artifactId>mica-coreartifactId>
    4. <version>2.0.9-GAversion>
    5. dependency>
    6. <dependency>
    7. <groupId>net.dreamlugroupId>
    8. <artifactId>mica-xssartifactId>
    9. <version>2.0.9-GAversion>
    10. dependency>

    mica-xss 配置

    @XssCleanIgnore

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

    1. import net.dreamlu.mica.xss.core.XssCleanIgnore;
    2. import org.springframework.web.bind.annotation.GetMapping;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. @RestController
    6. @XssCleanIgnore //设置该注解 用于跳过配置的Xss 防护
    7. @RequestMapping("/")
    8. public class IndexController {
    9. @GetMapping("/xss")
    10. public String xssGet(String data){
    11. System.out.println(data);
    12. return data;
    13. }
    14. }

    测试

    参数为:

    设置XSS防护

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

  • 相关阅读:
    .NET周刊【8月第4期 2023-08-27】
    【软考 系统架构设计师】软件架构设计② 软件架构风格
    Excel只读模式的密码如何取消?
    一种轻量分表方案-MyBatis拦截器分表实践
    有没有一段代码,让你为人类的智慧所折服
    MyBatis详解(一)
    【JAVA】Java 常见的垃圾收集器有哪些?
    ODOO原生会计6大核心业务凭证生成详细说明(干货!)
    【web安全】Nodejs原型链污染分析
    pt29django教程
  • 原文地址:https://blog.csdn.net/m0_56750901/article/details/126586638