最近在做系统防止XSS攻击功能,从网络上找到了很多方式,大多都是通过增加过滤器,对request的参数进行过滤,在通常的情况下是有效的,但是在spring mvc中却无效。
下文方法有效,但只是对输出的时候有效
-------------------------------------------------------------------------------------------------------------------------------------
在别人的博客上看到一篇解决xss注入的办法,如下文
spring mvc 做应用时,如果采用接受或者返回 json 格式的数据的时候,有可能会产生 XSS 注入, 对于XSS注入的一个常用方法,就是将接受到的数据进行 escape 处理。如果数量很少的方法,可以自己单独处理,但如果很多地方用到,最好是用公用的方法,一个简单的方法就是 扩展jackson 定制自己的 方法,对所有json 格式数据进行escape 处理.
spring mvc json 格式处理配置
<!-- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd --> <!-- Customize ObjectMapper for XSS --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> <property name="objectMapper"> <bean class="com.yihaomen.util.CustomObjectMapper" /> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
这里注意定制的 objectMapper 属性. 具体的实现类如下:
import java.io.IOException; import org.springframework.web.util.HtmlUtils; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; public class CustomObjectMapper extends ObjectMapper { private static final long serialVersionUID = -3448961813323784217L; public CustomObjectMapper() { SimpleModule module = new SimpleModule("HTML XSS Serializer", new Version(1, 0, 0, "FINAL","com.yihaomen","ep-jsonmodule")); module.addSerializer(new JsonHtmlXssSerializer(String.class)); this.registerModule(module); } class JsonHtmlXssSerializer extends JsonSerializer<String> { public JsonHtmlXssSerializer(Class<String> string) { super(); } public Class<String> handledType() { return String.class; } public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { if (value != null) { String encodedValue = HtmlUtils.htmlEscape(value.toString()); jsonGenerator.writeString(encodedValue); } } } }
在escape 数据的时候,采用了 spring 自带的工具类 org.springframework.web.util.HtmlUtils; 来处理.这样就能对所有需要接收json 格式的数据进行统一的处理了,从而避免 XSS 注入。
相关推荐
Spring-MVC处理XSS、SQL注入攻击的方法总结
配置防止XSS攻击的方法尝试,其中包含可以对sql注入的方法解决。
解决方案是对request请求的parameter 参数做过滤与字符转义
防sql注入和xss攻击, springmv拦截器,可自由调整需要拦截的字符
防止xss注入,有antlr-runtime和xssProtect两个jar包,及相关的filter过滤器。
首先说一下思路,防止这种类似于注入攻击,就是使用拦截器(Filter)处理特殊字符或过滤特殊字符 今天介绍一个方法,利用覆盖Servlet的getParameter方法达到处理特殊字符的目的来解决(防止)Xss攻击 web.xml,需要的...
SpringBoot +esapi springSecurity 过滤器链集成 实现防止xss攻击 实战代码
java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。
SpringBoot +esapi 实现防止xss攻击 实战代码,真实有效
java防止xss注入.rar 附案例及jar包
spring boot xss防御源码,博客请移步 https://mp.csdn.net/mdeditor/83617945#
经典的xss注入通关游戏,搭建简单。适合网络安全测试人员
所有需要的文件均在里面,超有所值
主要介绍了django框架防止XSS注入的方法,结合实例形式分析了XSS攻击的原理及Django框架防止XSS攻击的相关操作技巧,需要的朋友可以参考下
主要介绍了JSP spring boot / cloud 使用filter防止XSS的相关资料,需要的朋友可以参考下
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...
防止XSS攻击简单实用的解决办法,直接复制两个过滤器,然后配置web.xml即可实现
Java防止xss攻击依赖jar包