我们使用spring ws作为过滤器,根据传入soap请求上的令牌、时间戳和签名来执行WS-Security。
我们希望使用相同的过滤器来防止XXE攻击,并想知道这是否可能。
我们使用'org.springframework.ws.soap.axiom.AxiomSoapMessageFactory‘作为messageFactory,它有两个设置器'setSupportingExternalEntities’和'setReplacingEntityReferences‘,缺省情况下这两个设置器为false。
现在,如果在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;替换为& ;xxe;或者& xxe;Spring ws框架让它通过,这个错误就不会出现。
我不希望它经过任何进一步的处理,所以如果可能的话,我们可以以某种方式不允许在soap请求中使用doctype声明本身。
感谢您的帮助和指点来解决此问题
发布于 2018-06-09 05:50:43
加上我是如何解决它的。没有找到在spring-ws过滤器中处理它的方法,Spring也没有行为异常,因为它没有尝试解析传递的实体。
在稍后的项目流程中,我们将使用标准的java DOM解析器lib,并通过添加
factory.setFeature(DISALLOW_DOCTYPE_DECL_FEATURE,为真);
我们能够停止解决XXE问题的DTD声明。
https://stackoverflow.com/questions/50399299
复制相似问题