提问者:小点点

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


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

我也看过这个stackoverflow的答案。

我的问题是,

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


共1个答案

匿名用户

Spring使用Request estMappingHandlerAdapter,它是一个AbstractHandlerFacodAdapter,它支持带有签名的Handler方法——方法参数和返回类型,在@Request estMaps中定义。

有7个HttpMessageConverters,其中一个是Jaxb2RootElementHttpMessageConverter

Jaxb2RootElementHttpMessageConverter来自spring-web包。

从spring-web的3.2.8版本开始,Jaxb2RootElementHttpMessageConverter将进程外部实体设置为false,这反过来将XMLInputFactory属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false。

参考:来自Spring的Jaxb2RootElementHttpMessageConverter

回答使用

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.2.8.RELEASE</version>
</dependency>