背景
最近在做一个 Spring Boot 3 + Vue 3 前后端分离的开源项目。对于 POST 和 PUT 类型的请求方法,后端基本都是通过 @RequestBody 注解接收 application/json 格式的请求数据,所以以前通过过滤器 + 装饰器 HttpServletRequestWrapper 来解决 XSS 攻击的方式并不适用。大概看了一下网上的解决思路,发现代码大多有点复杂。在 Spring Boot 中,我们可以通过配置全局的 Json 反序列化器转义特殊字符来解决 XSS 攻击。
实现代码
/**
* JSON 全局反序列化器
*
* @author xiongxiaoyang
* @date 2022/5/21
*/
@JsonComponent
public class GlobalJsonDeserializer {
/**
* 字符串反序列化器
* 过滤特殊字符,解决 XSS 攻击
*/
public static class StringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException {
// 实际代码就这一行
return jsonParser.getValueAsString()
.replace("<", "<")
.replace(">", ">");
}
}
}
项目源码
https://github.com/201206030/novel