如何配置org.apache.cxf.jaxrs.provider.JAXBElementProvider防止XXE攻击

时间:2019-05-06 03:50:57

标签: jax-rs cxf

我将CXF(JAX RS)用于其余服务,并将默认JAXBElementProvider用于xml请求/响应封送/拆组。 一切正常..但是现在我想防止XML请求中的XXE攻击,默认情况下JAXBElementProvider不起作用。如何在下面的声明中配置xxe防护参数?

<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">

<jaxrs:server id="myendpoint" address="/">
<jaxrs:providers>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
</jaxrs:providers>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
</jaxrs:extensionMappings>
</jaxrs:server>

1 个答案:

答案 0 :(得分:1)

根据CXF安全通报CVE-2010-2076,应在CXF默认配置中缓解XXE攻击。这是假设您正在使用最新(或相对较新)的CXF版本,并且没有按XML security section of CXF doc中所述设置org.apache.cxf.stax.allowInsecureParser系统属性。 Woodstox解析器库必须在您的类路径中,才能由CXF用作默认XMLInputFactory。

您还可以使用自定义XMLInputFactory来满足您的需求(例如,出于安全性考虑禁用其他解析功能),但是在大多数情况下都不需要这样做。例如,

<jaxrs:server id="myendpoint" address="/">    
  <jaxrs:properties>            
    <entry key="javax.xml.stream.XMLInputFactory">                
      <bean class="your.own.ParserFactory" factory-method="createFactory"/>   
    </entry>        
  </jaxrs:properties>    
</jaxrs:server>

然后以您自己的your.own.ParserFactory#createFactory()开头:

XMLInputFactory factory = XMLInputFactory.newInstance();

并在Woodstox XMLInputFactory支持的属性中设置工厂所需的属性。

相关问题