Citrix ADC

请求处理的流支持

Citrix Web App Firewall支持请求端流,以提供显著的性能提升。该设备不缓冲请求,而是检查传入流量是否违反安全性,如SQL、跨站点脚本、字段一致性、字段格式。当设备完成对某个字段的数据处理后,请求被转发到后端服务器,同时设备继续计算其他字段。这种数据处理方式大大提高了处理表单中多个字段的处理时间。

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

注意:

后体限制动作始终设置为阻止,适用于流媒体和非流媒体模式。如果传入流量大于20MB, Citrix建议您配置PostBodyLimit到期望值。

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

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

字段名称匹配:Web应用防火墙学习引擎只能区分名称的前128个字节。如果一个表单有多个字段,这些字段的名称与前128个字节的字符串匹配相同,那么学习引擎就不会区分它们。类似地,部署的松弛规则可能无意中松弛了所有这些字段。

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

字段一致性检查:当你启用字段一致性时,会话中的所有表单都是基于Web应用防火墙插入的“as_fid”标签存储的,而不考虑“action_url”。

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

签名:签名现在有以下规范:

  • 地点:现在必须为每个模式指定位置。规则中的所有模式必须有一个<地址>标签。

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

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

    • HTTP_ANY
    • HTTP_RAW_COOKIE
    • HTTP_RAW_HEADER
    • HTTP_RAW_RESP_HEADER
    • HTTP_RAW_SET_COOKIE

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

Web应用程序防火墙不再检查跨站点脚本转换操作的属性名和值。现在,当使用流时,只有跨站点脚本属性名被转换。

处理跨站点脚本作为NetScaler 10.5中流更改的一部分。E版本及以后,跨站点脚本标记的处理已经更改。在早期版本中,出现左括号(<)或右括号(>),或同时出现左括号和右括号(<>)都会被标记为跨站点脚本冲突。这种行为在10.5中有所改变。E继续建造。仅出现左括号字符(<)或仅出现右括号字符(>)不再被视为攻击。当一个左括号字符(<)后面跟着一个右括号字符(>)时,跨站点脚本攻击就会被标记。这两个字符必须以正确的顺序出现(<后面跟着>)才能触发跨站点脚本冲突。

注意:

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

例子:

在10.5中,当Web应用防火墙检测到SQL违规时,整个输入字符串可能包含在以下日志消息中:

SQL关键字检查字段失败Text ="select a name from testbed1\;\(\;\)".* . txt ="select a name from testbed1\

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

SQL关键字检查字段失败文本= "选择(,)"< >阻塞

此更改适用于包含应用程序/ x-www-form-urlencoded,或多部分/格式,或文本/ x-gwt-rpc内容类型。处理过程中生成的日志消息JSONXML有效载荷在此更改中不受影响。

RAW POST Body:安全检查总是在RAW POST主体上进行。

表单的ID: Web应用防火墙插入了“as_fid”标签,这是一个计算出来的表单哈希值,对于用户会话来说是唯一的。对于特定的表单,无论用户或会话如何,它都是相同的值。

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

计数器:

添加带有“se”和“appfreq”前缀的计数器,用于跟踪流引擎和流引擎请求计数器。

Nsconsmg -d statswt0 -g se_err_

Nsconsmg -d statswt0 -g se_to_

Nsconsmg -d statswt0 -g se_cur_

Nsconsmg -d statswt0 -g appfreq_err_

Nsconsmg -d statswt0 -g appfreq_tot_

Nsconsmg -d statswt0 -g appfreq_cur_

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

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

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

小贴士:

  • Web应用程序防火墙安全检查必须与以前一样工作。
  • 安全检查的处理没有设置顺序。
  • 响应端处理不受影响,保持不变。
  • 如果使用无客户端VPN,流不参与。

重要的是:

计算Cookie长度:release 10.5。除了Citrix ADC 11.0版本(在65.x之前的版本中),Web应用防火墙处理cookie头的方式被改变了。设备单独评估cookie,如果cookie报头中的cookie长度超过了配置的长度,就会触发缓冲区溢出违规。因此,在NetScaler 10.5版本或更早版本中阻塞的请求可能是允许的。整个cookie头的长度不会被计算以确定cookie长度。在某些情况下,cookie的总大小可能比接受的值大,服务器可能会响应“400个坏请求”。

注意:这种变化已经逆转。NetScaler 10.5版中的行为。E到版本59.13xx。E及其后续构建类似于10.5版的非增强构建。现在在计算Cookie长度时考虑整个原始Cookie头。周围的空格和分隔名称-值对的分号(;)字符也包括在确定cookie长度中。