对 Spring 中的 @RequestBody json 请求数据做 XSS 过滤
·
关于xss过滤,网上大都是是对 param的,这个很多文章了 定义过滤器。XSSFilter 不说了,
参考 https://blog.csdn.net/yucaifu1989/article/details/61616554
还有就是对所有@ResponseBody 返回内容做XSS过滤的方案:
MappingJackson2HttpMessageConverter 的objectMapper 做设置
参考 百度
那么对 @RequestBody 的 json 数据怎么过滤呢:
spring处理json是通过MappingJackson2HttpMessageConverter实现的。
MappingJackson2HttpMessageConverter 里是用的 objectMapper 做的反序列化,从 json 字符串反序列化到java对象。
我们的目的是把 入参 json中的 字符串对象做xss过滤
jackson 可以自定义 Deserializer,我们就用这个来处理
public class StringXssDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String source = p.getText().trim();
// 把字符串做XSS过滤
return StringEscapeUtils.escapeHtml4(source);
}
}
把MappingJackson2HttpMessageConverter 中的 :
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter htmlEscapingConverter = new MappingJackson2HttpMessageConverter();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addDeserializer(String.class, new StringXssDeserializer());
htmlEscapingConverter.getObjectMapper().registerModule(simpleModule);
return htmlEscapingConverter;
}
Done
该方案无法对单个字段做特殊处理,全部会被转义。
本方案 对 @RequestBody String 无效
// 对下面的 RequestBody无效
@RequestMapping("test")
public String testxssstr(@RequestBody String data) {
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)