希望将disallow-doctype-decl功能设置为true以停止XXE攻击

时间:2018-05-17 19:34:43

标签: spring-mvc spring-ws axiom

我们使用spring ws作为过滤器,根据传入的soap请求中的令牌,时间戳和签名执行WS-Security。

我们希望使用相同的过滤器阻止XXE攻击,并想知道它是否可能。

我们使用'org.springframework.ws.soap.axiom.AxiomSoapMessageFactory'作为messageFactory,它有两个setter'setSupportingExternalEntities'& 'setReplacingEntityReferences'默认为false。

<!DOCTYPE foo [<!ENTITY xxe SYSTEM“file:/// c:/windows/win.ini”> ]>

现在,如果在soap请求中使用doctype对实体进行了声明,则使用& xxe进行引用;然后spring框架抛出错误

org.apache.axiom.soap.SOAPProcessingException: A SOAP message cannot contain entity references because it must not have a DTD
2018-05-18T13:14:33,272 DEBUG [org.springframework.ws.soap.server.SoapMessageDispatcher] Endpoint invocation resulted in exception - responding with Fault
org.apache.axiom.soap.SOAPProcessingException: A SOAP message cannot contain entity references because it must not have a DTD
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createEntityReference(StAXSOAPModelBuilder.java:359) ~[axiom-api-1.2.15.jar:1.2.15]
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:279) ~[axiom-api-1.2.15.jar:1.2.15]

但是,如果我们更换& name,那么这个错误就不会出现;与& amp; xxe;或&#38 xxe; Spring ws框架让它通过。

我不希望它进行任何进一步的处理,如果可能的话,我们可以在某种程度上不允许在soap请求中使用doctype声明。

感谢您解决此问题的任何帮助和指针

1 个答案:

答案 0 :(得分:0)

添加我如何解决它。没有找到办法在spring-ws过滤器中处理它,而Spring并没有误操作,因为它没有尝试解析传递的实体。

稍后在我们项目的流程中,我们使用标准的java DOM解析器lib并添加

factory.setFeature(DISALLOW_DOCTYPE_DECL_FEATURE,true);

我们能够停止解决XXE问题的DTD声明。