Citrix ADC

Web 服务互操作性检查

Web 服务互操作性 (WS-I) 检查会检查请求和响应是否符合 WS-I 标准,并阻止那些不遵守此标准的请求和响应。WS-I 检查的目的是阻止可能无法与其他 XML 正确交互的请求。攻击者可以使用互操作性中的不一致性来启动对 XML 应用程序的攻击。

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

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

  • set appfw profile <name> -xmlWSIAction [block] ][log] [learn] [stats] [none]

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

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

下面提供了每个 WSI 标准规则的说明:

规则 说明
BP1201 消息正文应该是一个带命名空间的 soap:envelope。
R1000 当 ENVELOPE 是故障时,soap:Fault 元素不得包含除了 faultcode、faultstring、faultactor 和 detail 之外的元素子元素。
R1001 当 ENVELOPE 是故障时,soap:Fault 元素的元素子元素必须是非限定的。
R1003 Receiver 必须接受具有任意数量限定或非限定属性(包括零)出现在细节元素上的错误消息。限定属性的命名空间可以是限定文档元素 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 属性的 ENVELOPE 只能使用词法形式 0 和 1。
R1014 ENVELOPE 中的 soap:Body 元素的子元素必须是命名空间限定的。
R1015 如果 Receiver 遇到文档元素不是 soap:Envelope 的 envelope,则必须生成错误。
R1031 当一个 ENVELOPE 包含一个错误代码元素时,该元素的内容不应使用 SOAP 1.1 点符号来细化故障的含义。
R1032 ENVELOPE 中的 soap:Envelope、soap:Header 和 soap:Body 元素不得具有与限定文档元素 Envelope 相同的命名空间中的属性。
R1033 ENVELOPE 不应包含命名空间声明:xmlns:xml=http://www.w3.org/XML/1998/namespace.
R1109 在 HTTP 请求消息中 SOAPAction HTTP 头字段的值必须是引号的字符串。
R1111 实例应对包含非故障 envelope 的响应消息使用 200 OK HTTP 状态代码。
R1126 如果响应信封为故障,则实例必须返回 500 内部服务器错误 HTTP 状态代码。
R1132 HTTP 请求消息必须使用 HTTP POST 方法。
R1140 应使用 HTTP/1.1 发送消息。
R1141 消息必须使用 HTTP/1.1 或 HTTP/1.0 发送。
R2113 ENVELOPE 不得包含 soapenc:arrayType 属性。
R2211 使用 rpc-literal 绑定描述的 ENVELOPE 不得具有值为 1 或 true 的 xsi:nil 属性。
R2714 对于单向操作,实例不得返回包含信封的 HTTP 响应。具体而言,HTTP 响应实体主体必须为空。
R2729 An ENVELOPE described with an rpc-literal binding that is a response MUST have a wrapper element whose name is the corresponding wsdl:operation name suffixed with the stringResponse.
R2735 使用 rpc-literal 绑定描述的 ENVELOPE 必须将参数的部分访问器元素和返回值放在没有命名空间中。
R2738 一个 ENVELOPE 必须包含在用于对其进行描述的 wsdl:binding 的 wsdl:operation 的 wsdl:input 或 wsdl:output 上指定的所有 soapbind:header。
R2740 描述中的 wsdl:binding 应该包含描述每个已知故障的 soapbind:fault。
R2744 HTTP 请求消息必须包含一个 SoapAction HTTP 头字段,其引号值等于 soapbind:operation 的 SoapAction 属性的值(如果存在于相应的 WSDL 描述中)。

Web 服务互操作性检查