在PHP中验证传入的SOAP请求到WSDL

时间:2008-09-19 23:33:56

标签: php soap wsdl xsd

PHP的内置SOAP扩展程序不会针对SOAP中的XML Schema验证传入WSDL请求中的所有内容。它确实检查了基本实体的存在,但是当你有像simpleType限制这样复杂的东西时,扩展几乎忽略了它们的存在。

验证SOAP中包含XML Schema WSDL请求的最佳方法是什么?

5 个答案:

答案 0 :(得分:4)

除了本机PHP5 SOAP库之外,我还可以告诉你,PEAR和Zend SOAP库目前都不会对消息进行模式验证。 (遗憾的是,我不知道任何PHP SOAP实现。)

我要做的是将XML消息加载到DOMDocument对象中,并使用DOMDocument的方法来验证模式。

答案 1 :(得分:3)

一直在挖掘这个问题。 本机PHP SoapServer都没有NuSOAP库进行任何验证。 PHP SoapServer只是进行类型转换。 例如,如果您定义

<xsd:element name="SomeParameter" type="xsd:boolean" />

并提交

<get:SomeParameter>dfgdfg</get:SomeParameter>

你会得到php Type boolean(true)

尽管NuSOAP识别出简单类型,但它只是简单地转换为字符串:

来自nuSOAP调试日志:

nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean

所以最好的方法是使用joelhardi解决方案来验证自己或使用像XERCES这样的xml解析器

答案 2 :(得分:2)

通常,不会对WSDL进行验证。如果WSDL设计得当,那么应该有一个底层的xml架构(XSD)来验证请求的主体。您的XML解析器应该能够做到这一点。

其余部分取决于您如何实现Web服务以及您正在使用的SOAP引擎。我不直接熟悉PHP引擎。对于WSDL /接口级别“验证”,我通常会这样做:

  1. 请求的正文是否与已知的请求类型匹配且是否有效(通过XSD)?
  2. 此消息在此上下文中是否有意义,是否可以将其映射到操作/处理程序?
  3. 如果是,请开始处理
  4. 否则:错误

答案 3 :(得分:-1)

我无法找到任何简单的方法来执行验证,最后在业务逻辑中有验证代码。

答案 4 :(得分:-3)

前段时间我使用a proof of concept创建了使用PHP的NuSOAP网络服务。我不知道它是否验证了输入,但我认为它确实如此。