`
tianya84
  • 浏览: 25697 次
社区版块
存档分类
最新评论

spring mvc jackson 防止XSS 注入方法

 
阅读更多

最近在做系统防止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 注入。

 

 

分享到:
评论

相关推荐

    Spring4.2.9+mybatis3.4.4集成(整合Jackson、防御XSS版)支持JDK1.6、Tomcat6

    在本文中,我们将深入探讨如何将Spring 4.2.9与MyBatis 3.4.4集成,并且添加Jackson支持以及XSS防御机制。这个集成方案特别适合那些仍使用JDK 1.6和Tomcat 6的开发者,因为它们是这两个库的最新兼容版本。 **Spring...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    本篇文章将深入探讨这个问题,提供解决方案,并涉及Spring MVC、Jackson等相关技术。 首先,理解`@ResponseBody`的作用至关重要。它是Spring MVC中的一个注解,用于指示控制器方法的返回值应直接写入HTTP响应体,而...

    Spring3MVC和jQuery的集成

    Spring3 MVC和jQuery是两种非常重要的Web开发技术。Spring3 MVC是Spring框架的一部分,用于构建后端MVC架构的应用程序,而jQuery则是一种强大的JavaScript库,简化了前端的DOM操作、事件处理和Ajax交互。本篇文章将...

    org.springframework.web.servlet-2.5.6.SEC01.jar

    1. **输入验证**:Spring MVC处理HTTP请求时,可能会面临注入攻击,如SQL注入或跨站脚本(XSS)攻击。2.5.6.SEC01可能加强了对用户输入的验证,防止恶意数据进入系统。 2. **Session管理**:Spring MVC在处理请求时...

    SpringMVC中后台转换json格式

    在开发Web应用时,SpringMVC作为Spring框架的一部分,常被用于处理HTTP请求和响应。在前后端交互中,JSON...在实际项目中,还可能需要考虑JSON安全问题,例如防止XSS和CSRF攻击,以及优化性能,如使用GZIP压缩等。

    springmvc-json_v2.zip

    在Spring MVC中,JSON处理是通过一些关键组件实现的,如Jackson或Gson库,它们允许我们将Java对象转换为JSON格式,并将JSON数据解析回Java对象。下面,我们将深入探讨Spring MVC如何与JSON集成以及相关的知识点: 1...

    扩展SpringMVC以支持绑定JSON格式的请求参数

    使用`@CrossOrigin`控制CORS策略,使用`@RequestBody`时结合`@Validated`和自定义的校验规则,以防止恶意数据注入。 总之,扩展Spring MVC以支持绑定JSON格式的请求参数,需要理解模型绑定机制,配置合适的`...

    spring security 参考手册中文版

    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...

    activity整合springmvc、mybatis

    8. **安全考虑**:考虑到移动应用的安全性,可能需要实现身份验证(如OAuth2.0)、数据加密和防止XSS、CSRF等攻击。 9. **ssiact文件**:由于未提供具体文件内容,ssiact可能包含了Spring MVC和MyBatis的配置文件、...

    【Spring项目源码】天气预报系统.zip

    10. **安全考虑**:Spring Security可能被用来保护系统免受攻击,如XSS、CSRF等,同时进行身份验证和授权管理。 11. **日志记录**:项目会包含日志记录功能,可能使用Log4j或Logback,以便在出现问题时追踪和诊断...

    Spring Boot(二)之web综合开发

    在传统的Spring MVC应用中,为了创建JSON响应,我们需要配置Jackson库(如Jackson的Jackson-databind)并明确地在控制器方法上使用`@ResponseBody`注解。但在Spring Boot中,这一切变得更加自动化。只需在类上添加`@...

    Spring Boot Web 开发.docx

    关于自定义Filter,它们在Web应用程序中扮演着重要角色,例如记录请求日志、防止XSS攻击以及进行权限验证等。Spring Boot已经内置了`OrderedCharacterEncodingFilter`和`HiddenHttpMethodFilter`来处理字符编码和...

    jeefuseMDA用户开发手册1

    Spring Security 3.0是企业级应用的安全解决方案,提供了身份验证、授权等功能,支持各种认证协议如LDAP、CAS,并能对HTTP请求进行过滤,防止XSS、CSRF等攻击。 6. 缓存管理: EhCache和OSCache是两个常用的Java...

    spring5-jokes-app

    标题“spring5-jokes-app”指的是一个基于Spring MVC框架开发的应用程序,主要功能是提供Chuck Norris笑话。这个应用可能是为了展示Spring MVC的功能,或者作为学习Spring MVC的实践项目。Spring MVC是Spring框架的...

    SSH+json

    6. **安全注意事项**:在使用JSON传输敏感数据时,应考虑安全问题,如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 7. **RESTful API设计**:SSH框架结合JSON常用于构建RESTful服务,这种服务遵循HTTP协议,...

    jquery与json

    在Spring项目中,配置Jackson库后,Spring MVC会自动使用它进行JSON转换。 **理解与使用JSON** 1. **JSON数据结构** JSON由键值对构成,键必须是字符串,用双引号括起来,值可以是各种数据类型,如字符串、数字、...

    Lab-09-Spring-Web-Api

    Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及用于构建Web应用的MVC(Model-View-Controller)模式。 **Spring Web MVC** Spring Web MVC...

    机票预订系统

    除了基本的HTTPS加密传输,还需要考虑防止SQL注入、XSS跨站脚本攻击等,这需要在开发过程中遵循最佳实践,例如使用预编译语句防止SQL注入,对用户输入进行过滤和转义以防止XSS。 性能优化也是重要的一环,比如使用...

    企业深度协同的Java Web应用开发课程研究.zip

    9. **安全机制**:了解如何在Java Web应用中实现用户认证和授权,如使用Spring Security或Apache Shiro,以及防止SQL注入和XSS攻击。 10. **测试与部署**:单元测试、集成测试和性能测试是保证代码质量的重要手段,...

    javaweb企业门户网站.zip

    4. **Spring框架**:Spring不仅提供了依赖注入(DI)和面向切面编程(AOP),还有Spring MVC模块,用于构建Web应用程序。此外,Spring Security可以用来处理权限管理和认证。 5. **Hibernate或MyBatis**:这两者都...

Global site tag (gtag.js) - Google Analytics