SpringMVC 防止XSS 工具(常规方式)
阿里
阅读:597
2021-03-31 16:50:56
评论:0
要求:
xss过滤请求的参数:Content-Type为 json(application/json)
SpringMVC 对于application/json 转换处理说明:
spring mvc默认使用MappingJackson2HttpMessageConverter转换器,
而它是使用jackson来序列化对象的,如果我们能 将jackson的序列化和反序列化过程修改,加入过滤xss代码,并将其注册到MappingJackson2HttpMessageConverter中
具体实现功能代码:
import java.io.IOException;
import org.apache.commons.text.StringEscapeUtils;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
/**
* 反序列化
*
*/
public class XssDefaultJsonDeserializer extends StdDeserializer<String> {
public XssDefaultJsonDeserializer(){
this(null);
}
public XssDefaultJsonDeserializer(Class<String> vc) {
super(vc);
}
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// TODO Auto-generated method stub
//return StringEscapeUtils.escapeEcmaScript(jsonParser.getText());
return StringEscapeUtils.unescapeHtml4(jsonParser.getText());
}
}
SpringMVC 配置对象:
@Configuration
@EnableWebMvc
public class SpingMVCConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
// TODO Auto-generated method stub
SimpleModule module = new SimpleModule();
// 反序列化
module.addDeserializer(String.class, new XssDefaultJsonDeserializer());
// 序列化
module.addSerializer(String.class, new XssDefaultJsonSerializer());
ObjectMapper mapper = Jackson2ObjectMapperBuilder.json().build();
// 注册自定义的序列化和反序列化器
mapper.registerModule(module);
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(mapper);
converters.add(converter);
}
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。