spring mvc jackson 防止XSS 注入方法

spring mvc 做应用时,如果采用接受或者返回 json 格式的数据的时候,有可能会产生 XSS 注入, 对于XSS注入的一个常用方法,就是将接受到的数据进行 escape 处理。如果数量很少的方法,可以自己单独处理,但如果很多地方用到,最好是用公用的方法,一个简单的方法就是 扩展jackson 定制自己的 方法,对所有json 格式数据进行escape 处理.

spring mvc json 格式处理配置
程序代码 程序代码

<!-- 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 属性. 具体的实现类如下:
程序代码 程序代码

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 注入。


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring mvc
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
回复回复菜鸟[2014-04-21 02:02 PM | del]
作者采用的jackson依赖是com.fasterxml.jackson.core
而不是org.codehaus.jackson

发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.