Cookie 一致性检查

Cookie 一致性检查会检查用户返回的 Cookie,以验证它们是否与您的网站为该用户设置的 Cookie 匹配。如果找到修改过的 cookie,则在请求转发到 Web 服务器之前将其从请求中删除。您还可以配置 Cookie 一致性检查以转换它处理的所有服务器 Cookie,方法是对 Cookie 进行加密、代理 Cookie 或添加标志。此检查适用于请求和响应。

攻击者通常会修改 cookie,以通过冒充以前经过身份验证的用户来获取敏感私人信息的访问权限,或者导致缓冲区溢出。缓冲区溢出检查可以防止试图通过使用非常长的 cookie 导致缓冲区溢出。Cookie 一致性检查侧重于第一种情况。

如果您使用向导或 GUI,则在“ 修改 Cookie 一致性”对话框中的“常规”选 项卡上,您可以启用或禁用以下操作:

  • 阻止
  • 日志
  • 学习
  • 统计信息
  • 改造。如果启用,“转换”操作将按照以下设置中指定的方式修改所有 Cookie:
    • 加密服务器 Cookie。在将响应转发给客户端之前,加密您的 Web 服务器设置的 Cookie(Cookie 一致性检查放宽列表中列出的任何 Cookie 除外)。当客户端发送后续请求时,加密的 cookie 会被解密,并且解密的 cookie 在转发到受保护的 Web 服务器之前重新插入到请求中。指定以下加密类型之一:
      • 没有。请勿加密或解密 Cookie。默认值。
      • 只解密。仅解密加密的 Cookie。不要加密饼干。
      • 仅加密会话。仅加密会话 Cookie。不要加密持久性 Cookie。解密任何加密的 cookie。
      • 加密所有。加密会话和持久性 Cookie。解密任何加密的 cookie。 注意:在加密 Cookie 时,Web App Firewall 会将 HttpOnly标志添加到 Cookie 中。此标志可防止脚本访问和解析 cookie。因此,该标志可防止基于脚本的病毒或木马访问已解密的 cookie 并使用该信息来泄露安全性。无论在 Cookie 中添加的 标志参数设置如何,这些设置是独立于加 密服务器 Cookie 参数设置来处理的。
  • 代理服务器 Cookie。代理您的网络服务器设置的所有非持久性(会话)Cookie,但 Cookie 一致性检查放宽列表中列出的任何 Cookie 除外。Cookie 是通过使用现有的 Web App Firewall 会话 cookie 代理的。Web App Firewall 会剥离受保护 Web 服务器设置的会话 cookie,并在将响应转发到客户端之前将其保存在本地。当客户端发送后续请求时,Web App Firewall 会将会话 cookie 重新插入到请求中,然后将其转发到受保护的 Web 服务器。指定以下设置之一:
    • 没有。不要代理 Cookie。默认值。
    • 仅限会话。仅限代理会话 Cookie。请勿代理持久性 Cookie 注意:如果您在启用 cookie 代理后禁用 Cookie 代理(将此值设置为“仅会 话”后将其设置为“ 无”),则会为禁用它之前建立的会话维护 Cookie 代理。因此,您可以在 Web App Firewall 处理用户会话时安全地禁用此功能。
  • 要在 Cookie 中添加的标志。在转换过程中向 Cookie 添加标志。指定以下设置之一:
    • 没有。不要向 Cookie 添加标志。默认值。
    • 只有 HTTP。添加 HttpOnly 标志到所有 Cookie。支持 HttpOnly 标志的浏览器不允许脚本访问设置此标志的 Cookie。
    • Secure(安全)。将安全标志添加到仅通过 SSL 连接发送的 cookie。支持安全标志的浏览器不会通过不安全的连接发送标记的 Cookie。
    • 全部。将 HttpOnly 标志添加到所有 Cookie,并将安全标志添加到仅通过 SSL 连接发送的 cookie。

如果您使用命令行界面,则可以输入以下命令来配置 Cookie 一致性检查:

  • set appfw profile <name> -cookieConsistencyAction [**block**] [**learn**] [**log**] [**stats**] [**none**]
  • set appfw profile <name> -cookieTransforms ([**ON**] | [**OFF**])
  • set appfw profile <name> -cookieEncryption ([**none**] | [**decryptOnly**] | [**encryptSession**] | [**encryptAll**])
  • set appfw profile <name> -cookieProxying ([**none**] | [**sessionOnly**])
  • set appfw profile <name> -addCookieFlags ([**none**] | [**httpOnly**] | [**secure**] | [**all**]

要为 Cookie 一致性检查指定放宽,您必须使用 GUI。在“修改 Cookie 一致性检查”对话框的“检查”选项卡上,单击“添加”以打开“添加 Cookie 一致性检查放宽”对话框,或选择现有的放宽,然后单击“打开”打开“修改 Cookie 一致性检查放宽”对话框。任何一个对话框都提供了用于配置放宽的相同选项。

以下是 Cookie 一致性检查放宽的示例:

  • 登录字段。以下表达式免除以字符串 logon_ 开头的所有 cookie 名称,后面是至少两个字符长且长度不超过十五个字符的字母或数字字符串:

     ^logon_[0-9A-Za-z]{2,15}$
    
  • 登录字段(特殊字符)。以下表达式免除以字符串 türkçe-logon_ 开头的所有 cookie 名称,后面是至少两个字符长且长度不超过十五个字符的字母或数字字符串:

     ^txC3xBCrkxC3xA7e-logon_[0-9A-Za-z]{2,15}$
    
  • 任意字符串。允许包含字符串 SC-item_,后跟用户添加到购物车的项目的 ID ([0-9A-Za-z]+),第二个下划线 (_),最后是他想要的这些项目的数量 ([1-9][0-9]?),以便用户可修改:

     ^sc-item_[0-9A-Za-z]+_[1-9][0-9]?$
    

警告:正则表达式很强大。特别是如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了您想要添加作为例外的 URL,而不是其他内容。粗心地使用通配符,尤其是点星号 ( .*) 元字符/通配符组合,可能会产生您不希望或期望的结果,例如阻止访问您不打算阻止的 Web 内容,或允许 Cookie 一致性检查会产生的攻击阻止。

重要

在 10.5.e 版本(在 59.13xx.e 版本之前的一些临时增强版本中)和 11.0 版本(在 65.x 之前的版本中)中,Web App Firewall 对 Cookie 标头的处理发生了更改。在这些版本中,每个 cookie 都是单独评估的,如果 cookie 标头中接收到的任何一个 cookie 的长度超过配置的 BufferOverflowMaxCookieLength,则触发缓冲区溢出冲突。由于此更改,可能允许在 10.5 和更早版本版本中被阻止的请求,因为不计算整个 cookie 标头的长度来确定 cookie 长度。在某些情况下,转发到服务器的 Cookie 总大小可能大于接受的值,并且服务器可能会响应“400 错误请求”。

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

注意

无会话 Cookie 一致性: cookie 一致性行为在版本 11.0 中发生了更改。在早期版本中,cookie 一致性检查调用会话化。Cookie 存储在会话中并签名。“wlt_”后缀会附加到瞬态 Cookie 中,并且在转发到客户端之前将“wlf_”后缀附加到持久性 Cookie 中。即使客户端没有返回这些已签名的 wlf/wlt cookie,Web App Firewall 也会使用存储在会话中的 cookie 来执行 cookie 一致性检查。

在版本 11.0 中,cookie 一致性检查是无会话的。Web App Firewall 现在添加了一个 cookie,它是 Web App Firewall 跟踪的所有 Cookie 的哈希。如果此哈希 cookie 或任何其他跟踪的 cookie 丢失或篡改,Web App Firewall 会在将请求转发到后端服务器之前剥离 Cookie,并触发 cookie 一致性冲突。服务器将请求视为新请求并发送新的 Set-cookie 标头。Citrix ADC 版本 13.0、12.1 和 NetScaler 12.0 和 11.1 中的 Cookie 一致性检查不具有无会话选项。

Cookie 一致性检查