最近在做系统防止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 4.2.9与MyBatis 3.4.4集成,并且添加Jackson支持以及XSS防御机制。这个集成方案特别适合那些仍使用JDK 1.6和Tomcat 6的开发者,因为它们是这两个库的最新兼容版本。 **Spring...
本篇文章将深入探讨这个问题,提供解决方案,并涉及Spring MVC、Jackson等相关技术。 首先,理解`@ResponseBody`的作用至关重要。它是Spring MVC中的一个注解,用于指示控制器方法的返回值应直接写入HTTP响应体,而...
Spring3 MVC和jQuery是两种非常重要的Web开发技术。Spring3 MVC是Spring框架的一部分,用于构建后端MVC架构的应用程序,而jQuery则是一种强大的JavaScript库,简化了前端的DOM操作、事件处理和Ajax交互。本篇文章将...
1. **输入验证**:Spring MVC处理HTTP请求时,可能会面临注入攻击,如SQL注入或跨站脚本(XSS)攻击。2.5.6.SEC01可能加强了对用户输入的验证,防止恶意数据进入系统。 2. **Session管理**:Spring MVC在处理请求时...
在开发Web应用时,SpringMVC作为Spring框架的一部分,常被用于处理HTTP请求和响应。在前后端交互中,JSON...在实际项目中,还可能需要考虑JSON安全问题,例如防止XSS和CSRF攻击,以及优化性能,如使用GZIP压缩等。
在Spring MVC中,JSON处理是通过一些关键组件实现的,如Jackson或Gson库,它们允许我们将Java对象转换为JSON格式,并将JSON数据解析回Java对象。下面,我们将深入探讨Spring MVC如何与JSON集成以及相关的知识点: 1...
使用`@CrossOrigin`控制CORS策略,使用`@RequestBody`时结合`@Validated`和自定义的校验规则,以防止恶意数据注入。 总之,扩展Spring MVC以支持绑定JSON格式的请求参数,需要理解模型绑定机制,配置合适的`...
5.1.3使用Spring MVC的AbstractSecurityWebApplicationInitializer 32 5.2 HttpSecurity 32 5.3 Java配置和表单登录 34 5.4授权请求 35 5.5处理注销 36 5.5.1 LogoutHandler 37 5.5.2 LogoutSuccessHandler 37 5.5.3...
8. **安全考虑**:考虑到移动应用的安全性,可能需要实现身份验证(如OAuth2.0)、数据加密和防止XSS、CSRF等攻击。 9. **ssiact文件**:由于未提供具体文件内容,ssiact可能包含了Spring MVC和MyBatis的配置文件、...
10. **安全考虑**:Spring Security可能被用来保护系统免受攻击,如XSS、CSRF等,同时进行身份验证和授权管理。 11. **日志记录**:项目会包含日志记录功能,可能使用Log4j或Logback,以便在出现问题时追踪和诊断...
在传统的Spring MVC应用中,为了创建JSON响应,我们需要配置Jackson库(如Jackson的Jackson-databind)并明确地在控制器方法上使用`@ResponseBody`注解。但在Spring Boot中,这一切变得更加自动化。只需在类上添加`@...
关于自定义Filter,它们在Web应用程序中扮演着重要角色,例如记录请求日志、防止XSS攻击以及进行权限验证等。Spring Boot已经内置了`OrderedCharacterEncodingFilter`和`HiddenHttpMethodFilter`来处理字符编码和...
Spring Security 3.0是企业级应用的安全解决方案,提供了身份验证、授权等功能,支持各种认证协议如LDAP、CAS,并能对HTTP请求进行过滤,防止XSS、CSRF等攻击。 6. 缓存管理: EhCache和OSCache是两个常用的Java...
标题“spring5-jokes-app”指的是一个基于Spring MVC框架开发的应用程序,主要功能是提供Chuck Norris笑话。这个应用可能是为了展示Spring MVC的功能,或者作为学习Spring MVC的实践项目。Spring MVC是Spring框架的...
6. **安全注意事项**:在使用JSON传输敏感数据时,应考虑安全问题,如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 7. **RESTful API设计**:SSH框架结合JSON常用于构建RESTful服务,这种服务遵循HTTP协议,...
在Spring项目中,配置Jackson库后,Spring MVC会自动使用它进行JSON转换。 **理解与使用JSON** 1. **JSON数据结构** JSON由键值对构成,键必须是字符串,用双引号括起来,值可以是各种数据类型,如字符串、数字、...
Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及用于构建Web应用的MVC(Model-View-Controller)模式。 **Spring Web MVC** Spring Web MVC...
除了基本的HTTPS加密传输,还需要考虑防止SQL注入、XSS跨站脚本攻击等,这需要在开发过程中遵循最佳实践,例如使用预编译语句防止SQL注入,对用户输入进行过滤和转义以防止XSS。 性能优化也是重要的一环,比如使用...
9. **安全机制**:了解如何在Java Web应用中实现用户认证和授权,如使用Spring Security或Apache Shiro,以及防止SQL注入和XSS攻击。 10. **测试与部署**:单元测试、集成测试和性能测试是保证代码质量的重要手段,...
4. **Spring框架**:Spring不仅提供了依赖注入(DI)和面向切面编程(AOP),还有Spring MVC模块,用于构建Web应用程序。此外,Spring Security可以用来处理权限管理和认证。 5. **Hibernate或MyBatis**:这两者都...