ADC

CSRF 表单标签检查

跨站点请求伪造 (CSRF) 表单标记检查会标记受保护网站发送给具有唯一且不可预测的 FormID 的用户的每个 Web 表单,然后检查用户返回的 Web 表单以确保提供的 FormID 正确无误。此检查可防止跨站请求伪造攻击。此检查仅适用于包含 Web 表单(包含或不包含数据)的 HTML 请求。它不适用于 XML 请求。

CSRF 表单标记检查可防止攻击者使用自己的 Web 表单向您的受保护网站发送包含数据的大量表单响应。与深入分析 Web 表单的某些其他安全检查相比,此检查所需的 CPU 处理能力相对较小。因此,它能够处理大量攻击,而不会严重降低受保护网站或Web App Firewall 本身的性能。

在启用 CSRF 表单标记检查之前,必须注意以下几点:

  • 您需要启用表单标记。CSRF 检查依赖于表单标记,没有表单标签就不起作用。
  • 对于包含受该配置文件保护的表单的所有网页,必须禁用 NetScaler 集成缓存功能。集成缓存功能和 CSRF 表单标记不兼容。
  • 您必须考虑启用推荐人检查。引用检查是“开始 URL”检查的一部分,但它可以防止跨站请求的伪造,而不是违反 Start URL 的行为。与CSRF表单标签检查相比,引用者检查给CPU带来的负载也更少。如果请求违反了 Referer 检查,则该请求会立即被阻止,因此不会调用 CSRF 表单标记检查。
  • CSRF 表单标记检查不适用于在表单来源 URL 和表单操作 URL 中使用不同域的 Web 表单。例如,CSRF 表单标记无法保护 http://www.example.com 的表单源 URL 为且表单操作 URL 为 http://www.example.org/form.pl 的 Web 表单,因为 example.com 和 example.org 是不同的域。

如果您使用向导或 GUI,则在“修改 CSRF 表单标记检查”对话框的“常规”选项卡上,您可以启用或禁用“阻止”、“记录”、“学习”和“统计”操作。

如果您使用命令行界面,则可以输入以下命令来配置 CSRF 表单标记检查:

  • set appfw profile <name> -CSRFtagAction [**block**] [**log**] [**learn**] [**stats**] [**none**]

要为 CSRF 表单标记检查指定放松选项,必须使用 GUI。在“修改 CSRF 表单标记校验”对话框的“检查”选项卡上,单击“添加 CSRF 表单标记校验放松”对话框,或者选择现有松动并单击“打开”以打开“修改 CSRF 表单标记校验放松”对话框。这两个对话框都提供了用于配置放宽的相同选项。

当您将 NetScaler Web App Firewall 会话限制设置为 0 或更低的值时,会生成警报,因为此类设置会影响需要正常运行的 Web App Firewall 会话的高级保护检查功能。

以下是 CSRF 表单标签校验放宽示例:

注意:以下表达式是 URL 表达式,可以在 Form Origin URL 和 Form Action URL 角色中使用。

  • 选择以查询后任何字符串开头 http://www.example.com/search.pl? 且包含任何字符串的 URL,新查询除外:

     ^http://www[.]example[.]com/search[.]pl?[^?]*$
     <!--NeedCopy-->
    
  • 选择以开头且路径 http://www.example-español.com 和文件名由大写和小写字母、数字、非 ASCII 特殊字符和路径中选定符号组成的 URL。n 字符和任何其他特殊字符均表示为编码的 UTF-8 字符串,其中包含分配给 UTF-8 字符集中每个特殊字符的十六进制代码:

    ^http://www[.]example-espa\xC3\xB1ol[.]com/(([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])
([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])\*/)\*([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])*[.](asp|htp|php|s?html?)$
<!--NeedCopy-->
  • 选择所有包含字符串 /search.cgi? 的 URL:
    ^[^?<>]\*/search[.]cgi?[^?<>]\*$
<!--NeedCopy-->

重要

正则表达式非常强大。如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的所有正则表达式。确保他们准确地定义了要添加为例外的 URL,而不是别的。粗心使用通配符,尤其是点-星号 (.*) 元字符/通配符组合,可能会产生您不想要的结果,例如阻止访问您本来不打算阻止的网页内容,或者允许支票本来可以阻止的攻击。

提示

在“开始 URL 操作”下启用 enableValidate 反向链接标题时,请确保将推荐人标头 URL 也添加到 StarTurl。

注意

当 NetScaler 达到 appfw_session_limit 且启用 CSRF 检查时,Web 应用程序会冻结。

要防止 Web 应用程序冻结,请使用以下命令缩短会话超时时间并增加会话限制:

在 CLI 中:> set appfw settings –sessiontimeout 300 在 shell 中:root@ns# nsapimgr_wr.sh -s appfw_session_limit=200000 在达到 appfw_session_limit 时 记录并生成 SNMP 警报可帮助您解决问题和调试问题。

CSRF 表单标签检查

在本文中