Citrix ADC

流式处理请求支持

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

注意:

Citrix Web App Firewall 支持最大 20 MB 的帖子大小,而无需流式处理。为了更好地利用资源,Citrix 建议您仅为大于 20 MB 的有效负载启用流式处理。此外,如果启用了流,后端服务器必须接受分块请求。

虽然流式处理过程对用户是透明的,但由于以下更改,需要进行小的配置调整:

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

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

在规范化过程中删除空格、百分比解码、unicode 解码和字符集转换,以提供安全检查检查。128 字节限制适用于 UTF-8 字符格式的字段名称的规范化表示。ASCII 字符的长度为 1 个字节,但是某些国际语言中字符的 UTF-8 表示形式可能从 1 个字节到 4 个字节不等。如果名称中的每个字符都需要 4 个字节才能转换为 UTF-8 格式,则该名称中的前 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_HEADER
    • HTTP_RAW_RESP_HEADER
    • HTTP_RAW_SET_COOKIE

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

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

处理 XSS 标签: 作为 NetScaler 10.5.e 版本及更高版本中流式处理更改的一部分,跨站点脚本标签的处理已更改。在早期版本中,存在开括号 (<), or close bracket (>) 或两个开括号和右括号 (<>) 都被标记为跨站点脚本违规。该行为在 10.5.e 构建中发生了变化。仅存在开括号字符 (<) 或只存在近括号字符 (>) 不再被视为攻击。这是当打开括号字符 (<) is followed by a close bracket character (>) 时,跨站点脚本攻击被标记。这两个字符必须按正确的顺序 (< followed by >) 显示,才能触发跨站点脚本冲突。

注意:

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

示例:

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

SQL 关键字检查失败的字段 文本 = “从 testbed1 中选择一个名称;\(;\)”.*<blocked>

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

字段text="select(;)" <blocked> 的 SQL 关键字检查失败 此更改适用于包含 应用程序 /x-www-格式urlen编码或多部分/表单数据或文本/x-gwt-rpc内容类型的请求。在处理 JSONXML 有效负载期间生成的日志消息在此更改中不会受到影响。

RAW POST 主体: 安全检查检查始终在 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 计数器:指示应该成功但由于内存分配问题或其他资源紧缩而失败的罕见事件。

_tot 计数器:不断增加的计数器。

_cur 计数器:指示基于当前交易记录的使用情况不断更改的当前值的计数器。

提示:

  • Web App Firewall 安全检查必须与以前一样工作。
  • 安全检查的处理没有设置顺序。
  • 响应端处理不受影响,并保持不变。
  • 如果使用 CVPN,则不会进行流媒体播放。

重要:

计算 Cookie 长度: 在 10.5.e 版本中,除了 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 长度时,还包括周围空格和分号 (;) 字符分隔名称-值对。

流式处理请求支持