使用 JAXB + Spring RESTful Web 服务防止 XXE(外部实体处理)攻击
Prevent XXE (External Entity Processing) Attack with JAXB + Spring RESTful Web Services
我知道我们可以通过在 JAXB 中将摘要 class XMLInputFactory 中的 属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false 来防止 XXE 攻击。
这个我也看过Whosebug answer。
我的问题是,
如何创建 XMLInputFactory 实例并在 spring 应用程序加载时将此 IS_SUPPORTING_EXTERNAL_ENTITIES 属性 设置为 false。那个特定的 XMLInputFactory 实例应该只用于所有使用 javax.xml.bind.annotation 包的 classes 的所有 JAXB 转换。
Spring 使用 RequestMappingHandlerAdapter
,这是一个 AbstractHandlerMethodAdapter
,它支持具有签名 -- 方法参数和 return 类型的 HandlerMethod,在 @RequestMapping
中定义。
有 7 个 HttpMessageConverters
其中一个是 Jaxb2RootElementHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
来自 spring-web 包。
从 spring-web 的 3.2.8 版本开始,Jaxb2RootElementHttpMessageConverter 将 processExternalEntities 设置为 false,进而将 XMLInputFactory 属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false。
参考:Jaxb2RootElementHttpMessageConverter 来自 Spring
回答使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
我知道我们可以通过在 JAXB 中将摘要 class XMLInputFactory 中的 属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false 来防止 XXE 攻击。
这个我也看过Whosebug answer。
我的问题是,
如何创建 XMLInputFactory 实例并在 spring 应用程序加载时将此 IS_SUPPORTING_EXTERNAL_ENTITIES 属性 设置为 false。那个特定的 XMLInputFactory 实例应该只用于所有使用 javax.xml.bind.annotation 包的 classes 的所有 JAXB 转换。
Spring 使用 RequestMappingHandlerAdapter
,这是一个 AbstractHandlerMethodAdapter
,它支持具有签名 -- 方法参数和 return 类型的 HandlerMethod,在 @RequestMapping
中定义。
有 7 个 HttpMessageConverters
其中一个是 Jaxb2RootElementHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
来自 spring-web 包。
从 spring-web 的 3.2.8 版本开始,Jaxb2RootElementHttpMessageConverter 将 processExternalEntities 设置为 false,进而将 XMLInputFactory 属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false。
参考:Jaxb2RootElementHttpMessageConverter 来自 Spring
回答使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>