Citrix ADC

Web服务互操作性检查

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

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

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

  • 设置appfw配置文件 -xmlWSIAction [block]][log] [learn] [stats] [none]

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

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

每条WSI标准规则的说明如下:

规则 描述
BP1201 消息体应该是带有名称空间的soap信封。
R1000 当一个信封是错误的,soap:Fault元素除了faultcode, faultstring, faultactor和detail之外,不能有其他子元素。
R1001 当一个信封是错误的,soap:Fault元素的子元素必须是不合格的。
R1003 RECEIVER必须接受出现在detail元素上的具有任意数量的合格或不合格属性(包括零)的错误消息。限定属性的名称空间可以是除限定文档元素Envelope的名称空间之外的任何名称空间。
R1004 当信封包含故障代码元素时,该元素的内容必须是SOAP 1.1中定义的故障代码之一(在细节元素中提供必要的附加信息),或者是名称空间由故障指定机构控制的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中soap:Body元素的子元素必须是命名空间限定的。
R1015 如果接收端遇到文档元素不是soap: envelope的信封,则必须产生一个错误。
R1031 当信封包含故障代码元素时,该元素的内容不得使用SOAP 1.1点符号来细化故障的含义。
R1032 Envelope中的soap:Envelope、soap:Header和soap:Body元素的属性不能与限定文档元素Envelope的属性在同一个命名空间中
R1033 信封不应该包含命名空间声明:xmlns: xml = http://www.w3.org/XML/1998/namespace。
R1109 HTTP请求消息中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绑定描述的ENVELOPE绝对不能在部分访问器上具有xsi:nil属性值为1或true。
R2714 对于单向操作,实例绝对不能返回包含信封的HTTP响应。具体来说,HTTP响应实体必须为空。
R2729 用rpc-literal绑定描述的ENVELOPE(响应)必须有一个包装器元素,其名称是对应的wsdl:操作名称,后缀为stringResponse。
R2735 用rpc-literal绑定描述的ENVELOPE必须将用于参数和返回值的部件访问器元素放在没有命名空间的地方。
R2738 一个ENVELOPE必须包含wsdl:operation的wsdl:input或wsdl:output中指定的所有soapbind:headers。
R2740 DESCRIPTION中的wsdl:binding应该包含soapbind:fault,描述每个已知的故障。
R2744 HTTP请求消息必须包含SOAPAction HTTP报头字段,如果在相应的WSDL描述中存在,则该字段的引号值等于soapbind:operation的SOAPAction属性的值。
Web服务互操作性检查

在本文中