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); 
          } 
}

 

标签:springMVC
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号