添加依赖
<!-- xss跨站脚本攻击 -->
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-core</artifactId>
<version>2.5.8</version>
</dependency>
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-xss</artifactId>
<version>2.5.8</version>
</dependency>
注意:mica与springboot有版本对应关系
mica 源码 Github:https://github.com/lets-mica mica 源码 Gitee(码云):https://gitee.com/596392912/mica mica 性能压测:https://github.com/lets-mica/mica-jmh 文档地址(官网):http://wiki.dreamlu.net
控制层
package com.ybchen.controller;
import com.ybchen.model.UserDO;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.xss.core.XssCleanIgnore;
import org.springframework.web.bind.annotation.*;
/**
* @ClassName XssController
* @Description xss跨站攻击
* @Author Alex
* @Date 2023/3 下午3:53
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value = "xss")
public class XssController {
/**
* 获取用户信息
* 当参数username=<script>alert(666)</script>
* 接收不到username参数,username=null
*
* @param user 用户对象
* @return
*/
@PostMapping("/post")
public String post(@RequestBody UserDO user,@RequestParam String age) {
log.info("【普通方式】获取用户信息,user:{},age:{}", user,age);
return user.toString();
}
/**
* 获取用户名称
* 不会把参数username=<script>alert(666)</script>过滤掉
*
* @param username 用户名称
* @return
*/
@GetMapping("/getUserName")
public String getUserName(String username) {
log.info("【普通方式】获取用户名称,username:{}", username);
return username;
}
/**
* 获取用户名称
* 跳过过滤, 在Controller或者方法上添加注解@XssCleanIgnore。
* 会把参数username=<script>alert(666)</script>过滤掉
*
* @param username 用户名称
* @return
*/
@XssCleanIgnore
@GetMapping("/getRegisterUserName")
public String getRegisterUserName(String username) {
log.info("【过滤方式】获取用户名称,username:{}", username);
return username;
}
}
@Data
public class UserDO {
/**
* 用户ID
*/
private String id;
/**
* 用户名称
*/
private String username;
}