Citrix ADC

饼干一致性检查

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

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

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

  • 阻止
  • 日志
  • 学习
  • 统计信息
  • 转换。如果启用,“转换” 操作将修改以下设置中指定的所有 cookie:
    • 加密服务器 Cookie。在将响应转发给客户端之前,请先对您的网络服务器设置的cookie进行加密,但Cookie一致性检查放宽列表中列出的cookie除外。当客户端发送后续请求时,加密的cookie将被解密,解密的cookie在转发到受保护的Web服务器之前会重新插入到请求中。指定以下加密类型之一:
      • 无。请勿加密或解密饼干。默认值。
      • 仅解密。仅解密加密的 cookie。请勿对饼干进行加密。
      • 仅加密会话。仅加密会话 cookie。请勿对永久性cookie进行加密。解密所有加密的 cookie。
      • 全部加密。加密会话和持久性 cookie。解密所有加密的 cookie。 注意:加密 cookie 时,Web App Firewall 会向 cookie 添加 httpOnl y 标志。此标志阻止脚本访问和解析 cookie。因此,该标志可防止基于脚本的病毒或特洛伊木马访问解密的 cookie 并使用该信息破坏安全性。无论要在 Cookie 中添加的标志参数设置如何,都将执行此操作,这些设置独立于加密服务器 Cookie 参数设置进行处理。
  • 代理服务器饼干。代理您的 Web 服务器设置的所有非持久(会话)cookie,但 Cookie 一致性检查放宽列表中列出的任何 Cookie 除外。Cookie 通过使用现有的Web App Firewall 会话 cookie 进行代理。Web App Firewall 会剥离受保护的 Web 服务器设置的会话 cookie 并将其保存在本地,然后再将响应转发到客户端。当客户端发送后续请求时,Web App Firewall 会在请求中重新插入会话 cookie,然后再将其转发到受保护的 Web 服务器。指定以下设置之一:
    • 无。不要代理 cookie。默认值。
    • 仅限会话。仅限代理会话 cookie。请勿代理持久性 cookie 注意:如果您在启用 cookie 代理后将其禁用(在设置为 “仅会话” 后将此值设置为 “无”),则会为在禁用之前建立的会话维护 cookie 代理。因此,您可以在 Web App Firewall 处理用户会话时安全地禁用此功能。
  • 要在 Cookie 中添加的标志。在转换过程中向 cookie 添加标志。指定以下设置之一:
    • 无。不要在 cookie 中添加标志。默认值。
    • 仅限 HTTP。将 httpOnly 标志添加到所有 cookie 中。支持 HttpOnly 标志的浏览器不允许脚本访问设置了此标志的 cookie。
    • Secure(安全)。将安全标志添加到仅通过 SSL 连接发送的 cookie 中。支持安全标志的浏览器不会通过不安全的连接发送标记的cookie。
    • 全部。为所有 cookie 添加 httpOnly 标志,将安全标志添加到仅通过 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 名称,后跟至少两个字符长度且长度不超过 15 个字符的字母或数字字符串:

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

     ^txC3xBCrkxC3xA7e-logon_[0-9A-Za-z]{2,15}$
     <!--NeedCopy-->
    
  • 任意字符串。允许包含字符串 sc-item_、后跟用户添加到购物车中的商品的 ID([0-9a-za-Z]+)、第二个下划线 (_),最后是他想要的这些物品的数量([1-9][0-9]?)的 cookie,为了用户可修改:

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

警告:正则表达式很强大。特别是如果你不太熟悉 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 后面,并在永久性 cookie 转发给客户端之前附加一个 “wlf_” 后缀。即使客户端没有返回这些已签名的 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 一致性检查没有无会话选项。

饼干一致性检查

在本文中