Web Services 使用JAXB + Spring REST风格的Web服务防止XXE(外部实体处理)攻击

uwopmtnx  于 2022-11-15  发布在  Spring
关注(0)|答案(1)|浏览(220)

我知道我们可以通过在JAXB中将抽象类XMLInputFactory中的属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false来防止XXE攻击。
我也看过这个stackoverflow answer
我的问题是
如何创建XMLInputFactory的示例,并在Spring应用程序加载时将此IS_SUPPORTING_EXTERNAL_ENTITIES属性设置为false?该特定XMLInputFactory示例应仅用于使用javax.xml.bind.annotation包的所有类的所有JAXB转换。

erhoui1w

erhoui1w1#

Spring使用RequestMappingHandlerAdapter,它是一个支持HandlerMethods的AbstractHandlerMethodAdapter,带有在@RequestMapping中定义的签名--方法参数和返回类型。
有7个HttpMessageConverters,其中一个是Jaxb2RootElementHttpMessageConverter
Jaxb2RootElementHttpMessageConverter来自spring-web软件包。
从spring-web的3.2.8版本开始,Jaxb 2 RootElementHttpMessageConverter会将processExternalEntities设定为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>

相关问题