Citrix ADC

Web服务互操作性检查

Web服务互操作性(WS-I)检查检查请求和响应是否符合WS-I标准,并阻止不符合该标准的请求和响应。WS-I检查的目的是阻止可能无法与其他XML适当交互的请求。攻击者可以利用互操作性中的不一致对XML应用程序发起攻击。

如果使用向导或GUI,在“修改Web服务互操作性检查”对话框中,在“常规”选项卡上,可以启用或禁用块、日志、统计和学习操作。

如果使用命令行方式,可以输入以下命令配置Web服务互操作性检查:

  • 设置appfw profile -xmlWSIAction [block]][log] [learn] [stats] [none]

要配置单独的Web服务互操作性规则,必须使用GUI。在“修改Web服务互操作性检查”对话框的“检查”页签中,选择一条规则,单击“启用”或“禁用”,启用或禁用该规则。您还可以单击Open打开该规则的Web Services Interoperability Detail消息框。消息框显示该规则的只读信息。您不能对这些规则中的任何一个进行修改或其他配置更改。

WS-I检查使用WS-I基本概要1.0中列出的规则。WS-I为开发可互操作的Web服务解决方案提供了最佳实践。WS-I检查仅对SOAP消息执行。

各WSI标准规则说明如下:

规则 描述
BP1201 消息体应该是带有名称空间的soap:信封。
R1000 当一个ENVELOPE是Fault时,soap:Fault元素必须没有faultcode、faultstring、faultactor和detail之外的子元素。
R1001 当ENVELOPE是Fault时,soap:Fault元素的子元素必须是不合格的。
R1003 接收方必须接受出现在细节元素上的具有任意数量的合格或不合格属性(包括零)的错误消息。限定属性的名称空间可以是限定文档元素Envelope以外的任何名称空间。
R1004 当一个ENVELOPE包含一个faultcode元素时,该元素的内容必须是SOAP 1.1中定义的错误代码之一(如果需要在detail元素中提供额外信息),或者是一个Qname,其名称空间由错误的指定权限控制(按优先级顺序)。
R1005 在命名空间与限定文档元素ENVELOPE的命名空间相同的任何元素上,ENVELOPE绝对不能包含soap:encodingStyle属性。
R1006 一个ENVELOPE绝对不能在soap:Body的任何子元素上包含soap:encodingStyle属性。
R1007 在rpc-literal绑定中描述的ENVELOPE绝对不能在soap:Body的孙子元素上包含soap:encodingStyle属性。
R1011 一个ENVELOPE绝对不能有soap:Body元素后面的任何soap: ENVELOPE元素的子元素。
R1012 消息必须序列化为UTF-8或UTF-16。
R1013 包含soap:mustUnderstand属性的信封必须只使用词法形式0和1。
R1014 ENVELOPE中Body元素的子元素必须是命名空间限定的。
R1015 如果接收方遇到文档元素不是soap的信封,则必须生成错误:envelope。
R1031 当一个ENVELOPE包含一个faultcode元素时,该元素的内容不能使用SOAP 1.1点符号来细化错误的含义。
R1032 Envelope中的soap:Envelope、soap:Header和soap:Body元素的属性绝对不能与限定文档元素Envelope的属性在相同的命名空间中
R1033 一个信封不应该包含命名空间声明:xmlns: xml = http://www.w3.org/XML/1998/namespace。
R1109 HTTP请求MESSAGE中的SOAPAction HTTP报头字段的值必须是一个带引号的字符串。
R1111 实例应该在包含非错误信封的响应消息上使用200 OK HTTP状态码。
R1126 一个实例必须返回一个500内部服务器错误HTTP状态码,如果响应信封是一个错误。
R1132 HTTP请求消息必须使用HTTP POST方法。
R1140 消息应该使用HTTP/1.1发送。
R1141 一条消息必须使用HTTP/1.1或HTTP/1.0发送。
R2113 一个信封绝对不能包含soapenc:arrayType属性。
R2211 用rpc-literal绑定描述的信封绝对不能有xsi:nil属性,该属性在部分访问器上的值为1或true。
R2714 对于单向操作,实例绝对不能返回包含信封的HTTP响应。具体来说,HTTP响应实体体必须为空。
R2729 一个使用rpc-literal绑定描述的ENVELOPE必须有一个包装器元素,其名称是对应的wsdl:operation名称,并以stringResponse作为后缀。
R2735 使用rpc-literal绑定描述的ENVELOPE必须将用于参数和返回值的部件访问器元素置于任何名称空间中。
R2738 一个ENVELOPE必须包含在wsdl:input或wsdl:output的wsdl:操作的wsdl:binding中指定的所有soapbind:头文件。
R2740 DESCRIPTION中的wsdl:binding应该包含描述每个已知错误的soapbind:fault。
R2744 HTTP请求消息必须包含一个SOAPAction HTTP报头字段,该字段的引号值等于soapbind:operation的SOAPAction属性的值(如果在相应的WSDL描述中出现)。
Web服务互操作性检查