使用JAXB + Spring RESTful Web服务防止XXE(外部实体处理)攻击

时间:2015-02-03 23:16:19

标签: spring web-services security jaxb javax.xml

我知道我们可以通过在JAXB中将抽象类XMLInputFactory中的属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false来阻止XXE攻击。

我也见过stackoverflow answer

我的问题是,

如何在Spring应用程序加载时创建XMLInputFactory实例并将此IS_SUPPORTING_EXTERNAL_ENTITIES属性设置为false。并且该特定XMLInputFactory实例仅应用于使用javax.xml.bind.annotation包的所有类的所有JAXB转换。

1 个答案:

答案 0 :(得分:4)

Spring使用RequestMappingHandlerAdapter,它是一个AbstractHandlerMethodAdapter,支持HandlerMethods,其签名方法参数和返回类型在@RequestMapping中定义。

共有7个HttpMessageConverters,其中一个是Jaxb2RootElementHttpMessageConverter

Jaxb2RootElementHttpMessageConverter来自spring-web包。

从Spring-web的3.2.8版开始,Jaxb2RootElementHttpMessageConverter将processExternalEntities设置为false,然后将XMLInputFactory属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false。

参考:

http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-web/3.2.8.RELEASE/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java?av=f

答案用途
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency>