Citrix ADC

对请求处理的流式支持

Citrix Web App Firewall 支持请求端流式处理,以显著提升性能。设备不会缓冲请求,而是检查传入流量是否存在安全违规,例如 SQL、跨站点脚本、字段一致性、字段格式。设备完成字段数据处理后,请求将转发到后端服务器,同时设备继续评估其他字段。这种数据处理显著缩短了处理具有许多字段的表单时的处理时间。

Citrix 建议您为大于 20MB 的有效负载内容启用流式处理。此外,如果启用了流式传输,后端服务器必须接受分块请求。

注意:

Post Body Limit 动作始终设置为阻止,适用于流媒体和非流模式。如果传入流量大于 20MB,Citrix 建议您将配置 PostBodyLimit 为预期值。

尽管流式传输过程对用户是透明的,但由于以下更改,还需要进行较小的配置调整:

正则表达式模式匹配: 对于连续字符串匹配,正则表达式模式匹配现在限制为4K。

字段名称匹配: Web App Firewall 学习引擎只能区分名称的前 128 个字节。如果表单有多个字段的名称与前 128 个字节的字符串匹配相同,则学习引擎不会区分它们。同样,部署的放宽规则可能会无意中放松所有这些字段。

在规范化过程中会删除空格、百分比解码、Unicode 解码和字符集转换,以提供安全性检查检查。128 字节限制适用于以 UTF-8 字符格式规范化表示的字段名称。ASCII 字符的长度为 1 个字节,但在某些国际语言中,字符的 UTF-8 表示形式可能在 1 字节到 4 字节之间。如果名称中的每个字符转换为 UTF-8 格式需要 4 个字节,则学习规则只能区分名称中的前 32 个字符。

字段一致性检查: 启用字段一致性后,会话中的所有表单都将基于 Web App Firewall 插入的 “as_fid” 标记进行存储,而不考虑 “action_url”。“

  • 表单字段一致性的强制表单标记: 启用字段一致性检查后,还必须启用表单标记。如果关闭表单标记,字段一致性保护可能不起作用。
  • 无会话表单字段一致性: 启用无会话字段一致性参数后,Web App Firewall 不再执行表单的 “GET” 到 “POST” 转换。表单标签也是无会话字段一致性所必需的。
  • 篡改 as_fid: 如果在篡改 as_fid 之后提交表单,即使没有字段被篡改,也会触发字段一致性冲突。在非流式请求中,这是允许的,因为表单可以使用存储在会话中的 “action_url” 进行验证。

签名: 签名现在具有以下规格:

  • 位置: 现在必须为每个模式指定位置,这是一项强制性要求。规则中的所有模式都 必须<Location> 标签。

  • 快速匹配: 所有签名规则必须具有快速匹配模式。如果没有快速匹配模式,则尽可能尝试选择一个模式。快速匹配是一个文字字符串,但如果它们包含可用的文字字符串,PCRE 可以用于快速匹配。

  • 弃用位置: 签名规则不再支持以下位置。

    • HTTP_ANY
    • HTTP_RAW_COOKIE
    • HTTP_RAW_HEAD
    • HTTP_RAW_RESP_HEAD
    • HTTP_RAW_SET_COOKIE

跨站脚本/SQL 转换: 原始数据用于转换,因为单引号 (‘)、反斜杠 () 和分号 (;)) 等SQL特殊字符和跨站点脚本标记是相同的,不需要对数据进行规范化。转换操作会评估特殊字符(例如 HTML 实体编码、百分比编码或 ASCII)的表示形式。

Web App Firewall 不再检查跨站点脚本转换操作的属性名称和值。现在,只有跨站点脚本属性名称在使用流式传输时才会被转换。

处理跨站点脚本标记: 作为 NetScaler 10.5.e 版本及更高版本中流式处理更改的一部分,跨站点脚本标记的处理已更改。在早期版本中,左括号 (<), or close bracket (>) 或左括号和右方括号 (<>) 的存在被标记为跨站脚本违规。在 10.5.e 版本以后的版本中,行为已更改。仅存在开括号字符 (<), or only the close bracket character (>) 不再被视为攻击。这是当一个左括号字符 (<) is followed by a close bracket character (>),即跨站点脚本攻击被标记时。两个字符必须以正确的顺序 (< followed by >) 出现,才能触发跨站点脚本冲突。

注意:

SQL 违规日志中的更改消息: 作为 Citrix ADC 10.5.e 版本中的流式更改的一部分,我们现在以块形式处理输入数据。RegEx 模式匹配现在限制为 4K 以进行连续字符串匹配。通过此更改,SQL 冲突日志消息可能包含与早期版本相比不同的信息。输入中的关键字和特殊字符由多个字节分隔。设备在处理数据时会跟踪 SQL 关键字和特殊字符串,而不是缓冲整个输入值。除字段名称外,日志消息还包括 SQL 关键字、SQL 特殊字符或同时包含 SQL 关键字和 SQL 特殊字符。输入的其余部分将不再包含在日志消息中,如以下示例所示:

示例:

在 10.5 中,当 Web App Firewall 检测到 SQL 违规时,整个输入字符串可能会包含在以下日志消息中:

字段 text="select a name from testbed1\;\(\;\)".*<blocked> 的 SQL 关键字检查失败。

在 11.0 中,我们只记录以下日志消息中的字段名称、关键字和特殊字符(如果适用)。

字段的 SQL 关键字检查失败 text="select(;)" <blocked>

此更改适用于包含 应用程序 /x-www-form-urlencoded、m ultipart/form-data 或 text/x-gwt-rpc 内容类型的请求。在处理 JSONXML 有效负载期间生成的日志消息不会受到此更改的影响。

RAW POST Body: 安全检查始终在 RAW POST 主体上进行。

表单 ID:Web App Firewall 插入了 “as_fid” 标记,该标签是表单的计算哈希值,对于用户会话而言不再是唯一的。无论用户或会话如何,它对于特定表单都是相同的值。

字符集: 如果请求没有字符集,则在处理请求时使用应用程序配置文件中指定的默认字符集。

计数器:

添加了前缀 “se” 和 “appfwreq” 的计数器,以跟踪流式处理引擎和流式处理引擎请求计数器。

nsconsmg -d statswt0 -g se_err_

nsconsmg -d statswt0 -g se_tot_

nsconsmg -d statswt0 -g se_cur_

nsconsmg -d statswt0 -g appfwreq_err_

nsconsmg -d statswt0 -g appfwreq_tot_

nsconsmg -d statswt0 -g appfwreq_cur_

_err counters:表示由于内存分配问题或其他资源紧缩而必须成功但失败的罕见事件。

_tot counters: 计数器不断增加。

_cur counters:指示当前值根据当前事务的使用情况不断变化的计数器。

提示:

  • Web App Firewall 安全检查的工作方式必须与以前相同。
  • 安全检查的处理没有固定的顺序。
  • 响应端处理不受影响,并且保持不变。
  • 如果使用无客户端 VPN,则不会进行流式传输。

重要:

计算 Cookie 长度: 在 10.5.e 版中,除了 Citrix ADC 11.0 版(在 65.x 之前的版本中)之外,Web App Firewall 处理 cookie 标头的方式也发生了变化。设备会单独评估 cookie,如果 cookie 标头中 cookie 的长度超过配置的长度,则会触发缓冲区溢出违规。 因此,可能会允许在 NetScaler 10.5 版本或更早版本中阻止的请求。整个 cookie 标头的长度不是为了确定 cookie 长度而计算的。在某些情况下,cookie的总大小可能大于接受的值,并且服务器可能会响应 “400错误请求”。

注意: 更改已恢复。NetScaler 版本 10.5.e 至版本 59.13xx.e 及其后续版本中的行为与 10.5 版的非增强版本类似。现在,在计算 cookie 的长度时,会考虑整个原始 Cookie 标头。确定 cookie 长度时还包括周围的空格和分号 (;) 字符分隔名称-值对。

对请求处理的流式支持

在本文中