美文网首页
对 spring中的 @RequestBody json 请求数

对 spring中的 @RequestBody json 请求数

作者: caisirius | 来源:发表于2018-09-13 16:47 被阅读0次

    关于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) {
    }
    

    相关文章

      网友评论

          本文标题:对 spring中的 @RequestBody json 请求数

          本文链接:https://www.haomeiwen.com/subject/ngtggftx.html