我知道我们可以通过在JAXB中将抽象类XMLInputFactory中的属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false来阻止XXE攻击。
我也见过stackoverflow answer。
我的问题是,
如何在Spring应用程序加载时创建XMLInputFactory实例并将此IS_SUPPORTING_EXTERNAL_ENTITIES属性设置为false。并且该特定XMLInputFactory实例仅应用于使用javax.xml.bind.annotation包的所有类的所有JAXB转换。
答案 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。
参考:
答案用途
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>