ADC

HTML 跨站点脚本检查

HTML 跨站点脚本(跨站点脚本)检查检查用户请求的标头和 POST 正文是否存在可能的跨站脚本攻击。如果发现跨站脚本,它要么修改(转换)请求以使攻击无害,要么阻止请求。

注意:

HTML 跨站点脚本(跨站点脚本)检查仅适用于内容类型、内容长度等。另外,请确保在您的 Web App Firewall配置文件中启用了“checkRequestHeaders”选项。

您可以使用违反 相同源规则的 HTML 跨站点脚本脚本来防止滥用受保护网站上的脚本,该规则规定,除了脚本所在的服务器之外,脚本不得访问或修改任何服务器上的内容。任何违反相同源规则的脚本都称为跨站点脚本,而使用脚本访问或修改另一台服务器上的内容的做法称为跨站点脚本。跨站脚本之所以成为安全问题,是因为允许跨站脚本的 Web 服务器可能会受到不在该 Web 服务器上的脚本攻击,而是在其他 Web 服务器上,例如攻击者拥有和控制的服务器。

不幸的是,许多公司都安装了大量违反相同来源规则的 JavaScript 增强型 Web 内容。如果在此类站点上启用 HTML 跨站点脚本检查,则必须生成相应的例外,以便该检查不会阻止合法活动。

Web App Firewall 为实施 HTML 跨站点脚本保护提供了各种操作选项。除了“阻止”、“日志”、“统计信息”和“学习”操作之外,您还可以选择 转换跨站脚本 ,以便通过在提交的请求中对脚本标签进行编码的实体来使攻击变得无害。您可以配置“检查跨站脚本的完整 URL”参数,以指定是否不仅要检查查询参数,还要检查整个 URL 以检测跨站脚本攻击。您可以配置 InspectQueryContentTypes 参数来检查请求查询部分是否存在特定内容类型的跨站脚本攻击。

您可以部署放宽以避免误报。Web App Firewall 学习引擎可以提供配置放宽规则的建议。

要为应用程序配置优化的 HTML 跨站点脚本保护,请配置以下操作之一:

  • 阻止-如果启用阻止,则如果在请求中检测到跨站点脚本标记,则会触发阻止操作。
  • 日志-如果启用日志功能,HTML 跨站点脚本检查将生成日志消息,指示其执行的操作。如果禁用阻止,则会为检测到跨站脚本违规的每个标头或表单字段生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。同样,即使跨站点脚本标签在多个字段中进行转换,每个请求也会为转换操作生成 1 条日志消息。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明有人试图发起攻击。
  • 统计信息-如果启用,统计信息功能将收集有关违规和日志的统计信息。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,以查看是否必须配置新的放宽规则或修改现有放宽规则。
  • 学习—如果您不确定哪种放宽规则最适合您的应用程序,则可以使用学习功能根据学习的数据生成 HTML 跨站点脚本规则建议。Web App Firewall 学习引擎会监视流量,并根据观察到的值提供学习建议。为了在不影响性能的情况下获得最佳收益,您可能需要在短时间内启用 learn 选项以获取具有代表性的规则示例,然后部署规则并禁用学习。
  • 转换跨站点脚本-如果启用,Web App Firewall 将对与 HTML 跨站点脚本检查匹配的请求进行以下更改:
    • 左尖括号 (<) 等同于 HTML 字符实体 (<)
    • 右尖括号 (>) 与等效的 HTML 字符实体 (>)

这样可以确保浏览器不会解释不安全的 html 标记(例如 <script>),从而运行恶意代码。如果您同时启用了请求标头检查和转换,则请求标头中找到的任何特殊字符也会被修改。如果受保护网站上的脚本包含跨站脚本功能,但您的网站不依赖这些脚本来正常运行,则可以安全地禁用阻止功能并启用转换。此配置可确保不会阻止任何合法的 Web 流量,同时阻止任何潜在的跨站脚本攻击。

  • 检查跨站点脚本的完整 URL。如果启用了检查完整 URL,Web App Firewall 将检查整个 URL 是否存在 HTML 跨站脚本攻击,而不是仅检查 URL 的查询部分。
  • 选中请求标头。如果启用了请求标头检查,Web App Firewall 将检查是否存在 HTML 跨站脚本攻击的请求标头,而不仅仅是 URL。如果使用 GUI,则可以在 Web App Firewall 配置文件的“设置”选项卡中启用此参数。
  • 检查 QueryContentTypes。如果配置了请求查询检查,App Firewall 将检查针对特定内容类型的跨站脚本攻击请求的查询。如果使用 GUI,则可以在 App Firewall 配置文件的“设置”选项卡中配置此参数。

重要:

作为流式传输更改的一部分,Web App Firewall 对跨站点脚本标记的处理已更改。此更改适用于 11.0 版本以后的版本。此更改也与支持请求端流式处理的 10.5.e 的增强版本有关。在早期版本中,左括号 (<), or close bracket (>) 或左括号和右方括号 (<>) 的存在被标记为跨站脚本违规。在包含对请求端流式处理的支持的构建中,行为已发生变化。只有右括号字符 (>) 不再被视为攻击。 即使存在左括号字符 (<),请求也会被阻止,并被视为攻击。跨站脚本攻击被标记。

跨站点脚本细粒度放松

Web App Firewall 允许您选择免除特定表单字段、标头或 Cookie 的跨站脚本检查检查。通过配置放宽规则,您可以完全绕过对其中一个或多个字段的检查。

Web App Firewall 允许您通过微调放松规则来实现更严格的安全性。应用程序可能需要灵活地允许特定模式,但配置放宽规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何跨站脚本攻击模式的检查。跨站点脚本精细放宽提供了允许特定属性、标签和模式的选项。其余的属性、标签和模式将被阻止。例如,Web App Firewall 当前默认设置的拒绝特征码超过 125 个。由于黑客可以在跨站点脚本攻击中使用这些模式,因此 Web App Firewall 会将其标记为潜在威胁。您可以松弛一个或多个被认为对特定位置安全的图案。其余潜在危险的跨站点脚本模式仍会针对目标位置进行检查,并继续触发安全检查违规。您现在有了更严格的控制。

放宽中使用的命令具有值类型值表达式的可选参数。值类型可以留空,或者您可以选择 标签属性模式。如果将值类型留空,则指定 URL 的已配置字段将免于跨站点脚本检查检查。 如果选择值类型,则必须提供值表达式。您可以指定值表达式是正则表达式还是文字字符串。当输入与允许和拒绝列表匹配时,只有在放宽规则中配置的指定表达式才会被豁免。

Web App Firewall 具有以下跨站点脚本内置列表:

  1. 跨站脚本允许的属性:有 52 个默认允许的属性,例如 **abbraccesskey、alg、 alt、a xisbgcolor边框单元格填充、单元格**间距字符、charoff字符集
  2. 跨站脚本允许的标签:有 47 个默认允许的标签,例如 address、b **asefontbgsound、big、blockquote、bgbr、caption、center**cite、 dd、del 等等
  3. 跨站脚本拒绝模式:有 129 种默认拒绝模式,例如 fsCommand、 javascript:onAbortonActivate

警告

Web App Firewall 操作 URL 是正则表达式。配置 HTML 跨站点脚本放宽规则时,可以将“名称”和“值表达式”指定为文字或 RegEx。正则表达式非常强大。特别是如果您不太熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要作为例外添加的规则,而不是其他任何规则。不小心使用通配符,尤其是点星号 (.*) 元字符或通配符组合,可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或者允许 HTML 跨站点脚本检查会阻止的攻击。

需要注意的事项:

  • 值表达式是可选参数。字段名称可能没有任何值表达式。
  • 字段名称可以绑定到多个值表达式。
  • 必须为值表达式分配值类型。跨站脚本值类型可以是:1) 标签、2) 属性或 3) 模式。
  • 每个字段名称/URL 组合可以有多个放宽规则
  • 表单字段名称和操作 URL 不区分大小写。

使用命令行配置 HTML 跨站点脚本检查

使用命令行配置 HTML 跨站点脚本检查操作和其他参数

如果使用命令行界面,则可以输入以下命令来配置 HTML 跨站点脚本检查:

  • set appfw profile 主题。
  • <name> -crossSiteScriptingAction (([block] [learn] [log] [stats]) | [**none**])
  • [set appfw profile 主题。
  • <name> **-crossSiteScriptingTransformUnsafeHTML** (ON | OFF)
  • 设set appfw profile 主题。
  • <name> -crossSiteScriptingCheckCompleteURLs (ON | OFF)
  • 设set appfw profile 主题。
  • HTML 跨站点脚本检查

HTML 跨站点脚本(跨站点脚本)检查检查用户请求的标头和 POST 正文是否存在可能的跨站脚本攻击。如果发现跨站脚本,它要么修改(转换)请求以使攻击无害,要么阻止请求。

注意:

HTML 跨站点脚本(跨站点脚本)检查仅适用于内容类型、内容长度等。另外,请确保在您的 Web App Firewall配置文件中启用了“checkRequestHeaders”选项。

您可以使用违反 相同源规则的 HTML 跨站点脚本脚本来防止滥用受保护网站上的脚本,该规则规定,除了脚本所在的服务器之外,脚本不得访问或修改任何服务器上的内容。任何违反相同源规则的脚本都称为跨站点脚本,而使用脚本访问或修改另一台服务器上的内容的做法称为跨站点脚本。跨站脚本之所以成为安全问题,是因为允许跨站脚本的 Web 服务器可能会受到不在该 Web 服务器上的脚本攻击,而是在其他 Web 服务器上,例如攻击者拥有和控制的服务器。

不幸的是,许多公司都安装了大量违反相同来源规则的 JavaScript 增强型 Web 内容。如果在此类站点上启用 HTML 跨站点脚本检查,则必须生成相应的例外,以便该检查不会阻止合法活动。

Web App Firewall 为实施 HTML 跨站点脚本保护提供了各种操作选项。除了“阻止”、“日志”、“统计信息”和“学习”操作之外,您还可以选择 转换跨站脚本 ,以便通过在提交的请求中对脚本标签进行编码的实体来使攻击变得无害。您可以配置“检查跨站脚本的完整 URL”参数,以指定是否不仅要检查查询参数,还要检查整个 URL 以检测跨站脚本攻击。您可以配置 InspectQueryContentTypes 参数来检查请求查询部分是否存在特定内容类型的跨站脚本攻击。

您可以部署放宽以避免误报。Web App Firewall 学习引擎可以提供配置放宽规则的建议。

要为应用程序配置优化的 HTML 跨站点脚本保护,请配置以下操作之一:

  • 阻止-如果启用阻止,则如果在请求中检测到跨站点脚本标记,则会触发阻止操作。
  • 日志-如果启用日志功能,HTML 跨站点脚本检查将生成日志消息,指示其执行的操作。如果禁用阻止,则会为检测到跨站脚本违规的每个标头或表单字段生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。同样,即使跨站点脚本标签在多个字段中进行转换,每个请求也会为转换操作生成 1 条日志消息。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明有人试图发起攻击。
  • 统计信息-如果启用,统计信息功能将收集有关违规和日志的统计信息。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,以查看是否必须配置新的放宽规则或修改现有放宽规则。
  • 学习—如果您不确定哪种放宽规则最适合您的应用程序,则可以使用学习功能根据学习的数据生成 HTML 跨站点脚本规则建议。Web App Firewall 学习引擎会监视流量,并根据观察到的值提供学习建议。为了在不影响性能的情况下获得最佳收益,您可能需要在短时间内启用 learn 选项以获取具有代表性的规则示例,然后部署规则并禁用学习。
  • 转换跨站点脚本-如果启用,Web App Firewall 将对与 HTML 跨站点脚本检查匹配的请求进行以下更改:
    • 左尖括号 (<) 等同于 HTML 字符实体 (<)
    • 右尖括号 (>) 与等效的 HTML 字符实体 (>)

这样可以确保浏览器不会解释不安全的 html 标记(例如 <!JEKYLL@5140@0>),从而运行恶意代码。如果您同时启用了请求标头检查和转换,则请求标头中找到的任何特殊字符也会被修改。如果受保护网站上的脚本包含跨站脚本功能,但您的网站不依赖这些脚本来正常运行,则可以安全地禁用阻止功能并启用转换。此配置可确保不会阻止任何合法的 Web 流量,同时阻止任何潜在的跨站脚本攻击。

  • 检查跨站点脚本的完整 URL。如果启用了检查完整 URL,Web App Firewall 将检查整个 URL 是否存在 HTML 跨站脚本攻击,而不是仅检查 URL 的查询部分。
  • 选中请求标头。如果启用了请求标头检查,Web App Firewall 将检查是否存在 HTML 跨站脚本攻击的请求标头,而不仅仅是 URL。如果使用 GUI,则可以在 Web App Firewall 配置文件的“设置”选项卡中启用此参数。
  • 检查 QueryContentTypes。如果配置了请求查询检查,App Firewall 将检查针对特定内容类型的跨站脚本攻击请求的查询。如果使用 GUI,则可以在 App Firewall 配置文件的“设置”选项卡中配置此参数。

重要:

作为流式传输更改的一部分,Web App Firewall 对跨站点脚本标记的处理已更改。此更改适用于 11.0 版本以后的版本。此更改也与支持请求端流式处理的 10.5.e 的增强版本有关。在早期版本中,左括号 (<), or close bracket (>) 或左括号和右方括号 (<>) 的存在被标记为跨站脚本违规。在包含对请求端流式处理的支持的构建中,行为已发生变化。只有右括号字符 (>) 不再被视为攻击。 即使存在左括号字符 (<),请求也会被阻止,并被视为攻击。跨站脚本攻击被标记。

跨站点脚本细粒度放松

Web App Firewall 允许您选择免除特定表单字段、标头或 Cookie 的跨站脚本检查检查。通过配置放宽规则,您可以完全绕过对其中一个或多个字段的检查。

Web App Firewall 允许您通过微调放松规则来实现更严格的安全性。应用程序可能需要灵活地允许特定模式,但配置放宽规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何跨站脚本攻击模式的检查。跨站点脚本精细放宽提供了允许特定属性、标签和模式的选项。其余的属性、标签和模式将被阻止。例如,Web App Firewall 当前默认设置的拒绝特征码超过 125 个。由于黑客可以在跨站点脚本攻击中使用这些模式,因此 Web App Firewall 会将其标记为潜在威胁。您可以松弛一个或多个被认为对特定位置安全的图案。其余潜在危险的跨站点脚本模式仍会针对目标位置进行检查,并继续触发安全检查违规。您现在有了更严格的控制。

放宽中使用的命令具有值类型值表达式的可选参数。值类型可以留空,或者您可以选择 标签属性模式。如果将值类型留空,则指定 URL 的已配置字段将免于跨站点脚本检查检查。 如果选择值类型,则必须提供值表达式。您可以指定值表达式是正则表达式还是文字字符串。当输入与允许和拒绝列表匹配时,只有在放宽规则中配置的指定表达式才会被豁免。

Web App Firewall 具有以下跨站点脚本内置列表:

  1. 跨站脚本允许的属性:有 52 个默认允许的属性,例如 **abbraccesskey、alg、 alt、a xisbgcolor边框单元格填充、单元格**间距字符、charoff字符集
  2. 跨站脚本允许的标签:有 47 个默认允许的标签,例如 address、b **asefontbgsound、big、blockquote、bgbr、caption、center**cite、 dd、del 等等
  3. 跨站脚本拒绝模式:有 129 种默认拒绝模式,例如 fsCommand、 javascript:onAbortonActivate

警告

Web App Firewall 操作 URL 是正则表达式。配置 HTML 跨站点脚本放宽规则时,可以将“名称”和“值表达式”指定为文字或 RegEx。正则表达式非常强大。特别是如果您不太熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要作为例外添加的规则,而不是其他任何规则。不小心使用通配符,尤其是点星号 (.*) 元字符或通配符组合,可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或者允许 HTML 跨站点脚本检查会阻止的攻击。

需要注意的事项:

  • 值表达式是可选参数。字段名称可能没有任何值表达式。
  • 字段名称可以绑定到多个值表达式。
  • 必须为值表达式分配值类型。跨站脚本值类型可以是:1) 标签、2) 属性或 3) 模式。
  • 每个字段名称/URL 组合可以有多个放宽规则
  • 表单字段名称和操作 URL 不区分大小写。

使用命令行配置 HTML 跨站点脚本检查

使用命令行配置 HTML 跨站点脚本检查操作和其他参数

如果使用命令行界面,则可以输入以下命令来配置 HTML 跨站点脚本检查:

- checkRequestHeaders \(ON | OFF) - ` - CheckRequestQueryNonHtml (ON | OFF)` 使用命令行配置 HTML 跨站点脚本检查放宽规则 使用 bind 或取消绑定命令添加或删除绑定,如下所示: - `bind appfw profile -crossSiteScripting [isRegex (REGEX | NOTREGEX)] [-location ] [-valueType (Tag|Attribute|Pattern) [] [-isValueRegex (REGEX | NOTREGEX) ]]` - `unbind appfw profile -crossSiteScripting [-location ] [-valueType (Tag |Attribute|Pattern) []]` ## 使用 GUI 配置 HTML 跨站点脚本检查 在 GUI 中,您可以在窗格中为与应用程序关联的配置文件配置 HTML 跨站点脚本检查。 使用 GUI 配置或修改 HTML 跨站点脚本检查 1. 导航到“**应用程序防火墙**”>“**配置文件**”,突出显示目标配置文件,然后单击“**编辑**”。 1. 在**高级设置**窗格中,单击**安全检查**。 安全检查表格显示了当前为所有安全检查配置的操作设置。您有两个配置选项: a. 如果要为 HTML 跨站点脚本启用或禁用“**阻止**”、“**日志**”、“**统计信息**”和“**学习**”操作,可以选中或清除表格中的复选框,单击“**确定**”,然后单击“**保存并关闭**”关闭“**安全检查**”窗格。 b. 如果要为此安全检查配置更多选项,请双击 **HTML 跨站点脚本**,或者选择该行并单击“**操作设置”**,以显示以下选项: **转换跨站点脚本**-转换不安全的脚本标记。 **检查跨站点脚本的完整 URL**-不要只检查 URL 的查询部分,而是检查完整的 URL 是否存在跨站脚本违规。 更改上述任何设置后,单击“**确定**”保存更改并返回“安全检查”表格。如果需要,您可以继续配置其他安全检查。单击“**确定**”保存您在“**安全检查**”部分所做的所有更改,然后单击“**保存并关闭”以关闭**“**安全检查**”窗格。 要启用或禁用“**检查请求头**”设置,请在“**高级设置**”窗格中单击“**配置文件设置”**。在“**常用设置**”中,选中或清除“**检查请求标头**”复选框。单击**确定**。 您可以使用“配置 **文件设置**”窗格右上角的 **X** 图标关闭此部分,或者,如果配置完此配置文件,则可以单击“**完成**”返回到“**应用程序防火墙**”>“配置 **文件**”。 要启用或禁用 **检查请求查询非 HTML** 设置,请在“**高级设置**”窗格中单击“**配置文件设置”**。在“**常用设置**”中,选中或清除“**检查请求查询非 HTML**”复选框。单击**确定**。您可以使用“配置 **文件设置**”窗格右上角的 X 图标关闭此部分,或者,如果配置完此配置文件,则可以单击“**完成**”返回“**App Firewall”>“配置文件**”。 使用 GUI 配置 HTML 跨站点脚本放宽规则 1. 导航到“**应用程序防火墙**”>“**配置文件**”,突出显示目标配置文件,然后单击“**编辑**”。 1. 在“**高级设置”**窗格中,单击“**放宽规则**”。 1. 在“放宽规则”表格中,双击 **HTML 跨站点脚本** 条目,或将其选中并单击“**编辑**”。 1. 在“**HTML 跨站点脚本放宽规则**”对话框中,执行放宽规则的“**添加****”、“编辑”**、“**删除**”、“**启**用”或“**禁用**”操作。 > **注意** > > 添加新规则时,除非在“**值类型字段”中选择“**标签**”、“**属性**”或“**模式**”选项,否则不会显示“值表达****式**”字段。 使用可视化工具管理 HTML 跨站点脚本放宽规则 要获得所有放宽规则的合并视图,可以突出显示“放宽规则”表中的“**HTML 跨站点脚本**”行,然后单击“**可视化工具**”。已部署放宽的可视化工具为您提供了 **添加** 新规则或 **编辑** 现有规则的选项。您还可以通过选择节点并单击放宽可视化工具中的相应按钮来**启用**或**禁用**一组规则。 使用 GUI 查看或自定义跨站点脚本模式 您可以使用 GUI 查看或自定义跨站点脚本允许的属性或允许的标记的默认列表。您还可以查看或自定义跨站脚本被拒绝的模式的默认列表。 默认列表在 **应用程序防火墙** > **特征码 >**默认签**名**中指定。 如果您没有将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认跨站点脚本允许和拒绝列表进行跨站点脚本安全检查处理。默认签名对象中指定的标签、属性和模式是只读的。您无法编辑或修改它们。 如果要修改或更改这些签名,请复制“默认签名”对象以创建用户定义的特征码对象。在新的用户定义的特征码对象中更改允许或拒绝的列表,并在您的配置文件中使用此签名对象,该配置文件正在处理您要使用这些自定义允许和拒绝列表的流量的流量。 1. 要查看默认的跨站点脚本模式,请执行以下操作: a. 导航到“**应用程序防火墙**”>“**特征码**”,选择“**默认签名**”,然后单击“**编辑**”。然后单击“**管理 SQL/跨站点脚本模式**”。 “**管理 SQL/跨站点脚本路径**”表显示与跨站点脚本相关的以下三行: `xss/allowed/attribute` `xss/allowed/tag` `xss/denied/pattern` b. 选择一行,然后单击“**管理元素**”以显示 Web App Firewall 跨站点脚本检查使用的相应 **跨站点脚本** 元素(标记、属性、模式)。 1. **自定义跨站点脚本元素**:您可以编辑用户定义的特征码对象,以自定义允许的标记、允许的属性和拒绝的模式。您可以添加新条目或删除现有条目。 a. 导航到 **应用程序防火墙** > **特征码**,突出显示目标用户定义的特征码,然后单击 **编辑**。单击 **管理 SQL/跨站点脚本模式** 以显示 **管理 SQL/跨站点脚本路径** 表。 b. 选择目标跨站点脚本行。 i. 单击“**管理元素**”以 **添加**、 **编辑** 或 **删除** 相应的跨站点脚本元素。 ii. 单击“**移除**”以删除选定的行。 > **警告:** > > 在删除或修改任何默认的跨站点脚本元素,或者删除跨站点脚本路径以删除整行之前,必须小心。签名规则和跨站点脚本安全检查依赖于这些元素来检测攻击,从而保护您的应用程序。如果在编辑过程中删除了所需的模式,自定义跨站脚本元素会使您的应用程序容易受到跨站点脚本攻击。 ## 了解 HTML 跨站点脚本(跨站点脚本)违规情况 启用学习后,NetScaler Web App Firewall 学习引擎会监视流量并了解跨站脚本 URL 违规情况。您可以定期检查跨站点脚本 URL 规则,并针对误报情况进行部署。 > **注意:** > > 在群集配置中,所有节点的版本必须相同,才能部署跨站脚本 URL 规则。 作为学习配置的一部分,Web App Firewall 提供细粒度的 HTML 跨站点脚本学习。 学习引擎会针对观察到的值类型(标签、属性、模式)以及输入字段中观察到的相应值表达式提出建议。除了检查被阻止的请求以确定当前规则是否限制性太强且需要放宽之外,您还可以查看学习引擎生成的规则,以确定哪些值类型和值表达式触发了违规,需要在放宽规则中加以解决。 > **注意:** > > Web App Firewall 的学习引擎只能区分名称的前 128 个字节。如果表单具有多个字段,名称与前 128 个字节匹配,则学习引擎可能无法区分它们。同样,部署的放宽规则可能会无意中放宽HTML跨站点脚本检查中的所有此类字段。 > > **提示:** > > 长度超过 12 个字符的跨站点脚本标记不会被学习或正确记录。 > > 如果您需要更大的标签长度来学习,您可以在 **AS_cross-site scripting_ALLOWED_TAGS_LIST** 中为长度为“x”添加一个大的不出现的标签。 HTML 跨站点脚本学习过程可减少跨站脚本攻击中的误报。启用学习后,您可以了解请求中的所有违规,并有可能将放宽应用于多个标记、属性或模式,而无需重复。 例如,如果一个有效负载中有 15 个自定义标记,每个标签都会导致违规,则可以对所有标记为违规的标记应用细粒度放宽,而不必重复一次对一个标记应用放宽的过程。 **场景 1:已启用学习并启用阻止:** 在这种情况下,NetScaler 设备将学习自定义标记/属性/模式中的所有违规,然后阻止请求并记录每个违规。对于表单字段、标头或cookie中标识的违规行为,行为是一致的。 **场景 2:已启用学习和禁用阻止:** 在这种情况下,NetScaler 设备会学习自定义标记/属性/模式中的违规,并记录每个违规。请求未被阻止。对于表单字段、标头或cookie中标识的违规行为,行为是一致的。 使用命令行界面查看或使用学习的数据 在命令提示符下,键入以下命令之一: - `show appfw learningdata crossSiteScripting` - `rm appfw learningdata -crossSiteScripting [] [ ]` - `export appfw learningdata **crossSiteScripting*` ### 配置跨站点脚本精细放宽以绕过自定义标签 您可以在 Web App Firewall配置文件中配置跨站点脚本放宽,以绕过允许列表中不存在的自定义标记/属性/模式。 在命令提示符下,键入: `bind appfw profile p1 -crossSiteScripting -valueType ` **示例:** `bind appfw profile profile1 -crossSiteScripting formfield1 http://1.1.1.1 -valueType Tag tag1` 使用 GUI 查看或使用学习的数据 1. 导航到“**应用程序防火墙**”>“**配置文件**”,突出显示目标配置文件,然后单击“**编辑**”。 2. 在“**高级设置”**窗格中,单击“**学习规则**”。可以在“学习的规则”表中选择“**HTML 跨站点脚本**”条目,然后双击该条目以访问学习的规则。该表显示了“**字段名称**”、“**操作 URL**”、“**值类型**”、“**值**”和“**命中**”列。您可以先部署学习的规则或编辑规则,然后再将其部署为放宽规则。要放弃规则,可以选择该规则,然后单击“**跳过**”按钮。一次只能编辑一条规则,但可以选择要部署或跳过的多个规则。 您还可以选择显示学到的放宽的摘要视图,方法是在“学习的规则”表格中选择 **HTML 跨站点脚本** 条目,然后单击 **Visualizer 以获得所有学习到的违规的合并视** 图。可视化工具可以轻松管理学习的规则。它可以在一个屏幕上显示数据的全面视图,并且只需单击一下即可对一组规则执行操作。可视化工具的最大优点是它推荐正则表达式来整合多个规则。您可以根据分隔符和操作 URL 选择这些规则的子集。通过从下拉列表中选择数字,可以在可视化工具中显示 25、50 或 75 条规则。学习规则的可视化工具提供了编辑规则并将其作为放松部署的选项。或者您可以跳过规则来忽略它们。 ## 将日志功能与 HTML 跨站点脚本检查结合使用 启用日志操作后,HTML 跨站点脚本安全检查违规将作为 **AppFW_Cross-Site 脚本** 违规记录在审核日志中。Web App Firewall 支持本机和 CEF 日志格式。您还可以将日志发送到远程 syslog 服务器。 使用命令行访问日志消息 切换到 shell 并尾随 `/var/log/` 文件夹中的 ns.logs,以访问与 HTML 跨站点脚本冲突相关的日志消息: > `Shell` > `tail -f /var/log/ns.log | grep APPFW_cross-site scripting` **CEF 日志格式的跨站点脚本安全检查违例日志消息示例:** ``` Jul 11 00:45:51 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|\*\*APPFW_cross-site scripting\*\*|6|src=10.217.253.62 geolocation=Unknown spt=4840 method=GET request=http://aaron.stratum8.net/FFC/CreditCardMind.html?abc=%3Cdef%3E msg=\*\*Cross-site script check failed for field abc="Bad tag: def"\*\* cn1=133 cn2=294 cs1=pr_ffc cs2=PPE1 cs3=eUljypvLa0BbabwfGVE52Sewg9U0001 cs4=ALERT cs5=2015 act=\*\*not blocked\*\* ``` 显示转换操作的本机日志格式的跨站点脚本安全检查冲突日志消息示例 ``` Jul 11 01:00:28 10.217.31.98 07/11/2015:01:00:28 GMT ns 0-PPE-0 : default APPFW \*\*APPFW_cross-site scripting\*\* 132 0 : 10.217.253.62 392-PPE0 eUljypvLa0BbabwfGVE52Sewg9U0001 pr_ffc http://aaron.stratum8.net/FFC/login.php?login_name=%3CBOB%3E&passwd=&drinking_pref=on &text_area=&loginButton=ClickToLogin&as_sfid=AAAAAAVFqmYL68IGvkrcn2pzehjfIkm5E6EZ9FL8YLvIW_41AvAATuKYe9N7uGThSpEAxbb0iBx55jyvqOZNiVK_XwEPstMYvWHxfUWl62WINwRMrKsEDil-FC4llF \*\*Cross-site script special characters seen in fields \*\* ``` ### 使用 GUI 访问日志消息 GUI 包含一个用于分析日志消息的有用工具(Syslog 查看器)。您可以通过多种方式访问 Syslog 查看器: - 导航到 **应用程序防火墙** > **配置文件**,选择目标配置文件,然后单击 **安全检查**。突出显示“**HTML 跨站点脚本**”行,然后单击“**日志**”。当您直接从配置文件的 HTML 跨站点脚本检查访问日志时,GUI 会过滤掉日志消息,并仅显示与这些安全检查冲突相关的日志。 - 您还可以通过导航到 **NetScaler** > **系统 >**审核**来访问系统**日志查看器。 在“**审核消息**”部分,单击 **Syslog 消息** 链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。 - 导航到 **应用程序防火墙** > **策略** > **审核**。在“审核消息”部分,单击 **Syslog 消息**链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。 基于 HTML 的 Syslog 查看器提供了各种筛选选项,用于仅选择您感兴趣的日志消息。 要为 **HTML 跨站点脚本** 检查选择日志消息,请通过在 **模块** 的下拉列表选项中选择 **APPFW**进行筛选。“**事件类型**”列表提供了一系列丰富的选项,以进一步优化您的选择。例如,如果选中 **AppFW_Cross-Site 脚本** 复选框并单击 **应用** 按钮,则系统日志查看器中只会显示与 **HTML 跨站点脚本安全** 检查冲突相关的日志消息。 如果将光标置于特定日志消息的行中,则日志消息下方会出现多个选项,例如 **模块**、 **事件类型****、事件 ID**、**客户端 IP** 等。您可以选择这些选项中的任何一个来突出显示日志消息中的相应信息。 **“单击部署**”功能仅在 GUI 中可用。您可以使用 Syslog Viewer 不仅查看日志,还可以根据 Web App Firewall 安全检查违规的日志消息部署 HTML 跨站点脚本放宽规则。对于此操作,日志消息必须采用 CEF 日志格式。“单击部署”功能仅适用于由阻止(或不阻止)操作生成的日志消息。您无法为有关转换操作的日志消息部署放宽规则。 要从 Syslog 查看器部署放宽规则,请选择日志消息。选定行的 **Syslog Viewer** 框的右上角出现一个复选框。选中该复选框,然后从“**操作**”列表中选择一个选项以部署放宽规则。**“编辑和部署**”、“**部****署”和“全部部署****”作为操作** 选项提供。 使用“**单击部署”选项部署** 的 HTML 跨站点脚本规则不包括细粒度放宽建议。 ### 使用 GUI 配置“单击部署”功能 1. 在 Syslog 查看器中,在“**模块**”选项中选择 **APPFW** 。 1. 选择 **App_Cross-Site 脚本** 作为 **事件类型** 以筛选相应的日志消息。 1. 选中该复选框以标识要部署的规则。 1. 使用“操作”(A **ction** ) 下拉列表的选项部署放宽规则。 1. 验证规则是否出现在相应的放宽规则部分中。 ## HTML 跨站点脚本违规的统计信息 启用 stats 操作后,当 Web App Firewall 对此安全检查采取任何操作时,HTML 跨站点脚本检查的计数器将增加。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器增量的大小可能因配置的设置而异。例如,如果启用了阻止操作,则对包含 3 个 HTML 跨站点脚本违规的页面的请求会将统计信息计数器增加 1,因为当检测到第一个违规时,该页面将被阻止。但是,如果禁用该块,处理相同的请求会增加违规的统计信息计数器和日志三,因为每个违规都会生成单独的日志消息。 使用命令行显示 HTML 跨站点脚本检查统计信息 在命令提示符下,键入: `> sh appfw stats` 要显示特定配置文件的统计信息,请使用以下命令: `> **stat appfw profile** ` ### 使用 GUI 显示 HTML 跨站点脚本统计信息 1. 导航到“**安全**”>“**应用程序防火墙”>“配置文件”>“统计信息**”。 1. 在右窗格中,访问 **统计信息** 链接。 1. 使用滚动条查看有关 HTML 跨站点脚本违规和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。 ## 重要内容 - **内置对 HTML 跨站点脚本攻击防护的支持**— NetScaler Web App Firewall 通过监视已接收负载中允许的属性和标记以及拒绝的模式的组合,来防范跨站点脚本攻击。跨站点脚本检查使用的所有内置默认允许的标记、允许的属性和拒绝的模式都在 /netscaler/default_custom_settings.xml 文件中指定。 - **自定义** - 您可以更改标记、属性和模式的默认列表,以针对应用程序的特定需求自定义跨站点脚本安全检查检查。创建默认签名对象的副本、修改现有条目或添加新条目。将此签名对象绑定到您的配置文件以使用自定义配置。 - **混合安全模型**— 签名和深度安全保护都使用绑定到配置文件的签名对象中指定的 SQL/跨站点脚本模式。如果没有将签名对象绑定到配置文件,则使用默认签名对象中存在的 SQL/跨站点脚本模式。 - **变换**—请注意有关转换操作的以下事项: 转换操作独立于其他“跨站点脚本”操作设置。如果启用了转换并且禁用了阻止、日志、统计和学习,则跨站点脚本标记将被转换。 如果启用了阻止操作,则该操作优先于转换操作。 - **精细粒度的放松和学习**。微调放宽规则,从安全检查检查中放宽一部分跨站点脚本元素,但检测其余部分。学习引擎根据观测到的数据推荐特定的值类型和值表达式。 - **单击以部署**-在 syslog 查看器中选择一条或多条跨站点脚本违例日志消息,并将其作为放宽规则进行部署。 - **Charset**—必须根据应用程序的需要设置配置文件的默认字符集。默认情况下,配置文件字符集设置为美国英语 (ISO-8859-1)。如果收到的请求没有指定字符集,则 Web App Firewall 会将该请求视为 ISO-8859-1 来处理。如果左括号字符 (<) or the close bracket character (>) 是用其他字符集编码的,则这些字符不会被解释为跨站脚本标签。例如,如果请求包含 UTF-8 字符串“%uff1cscript%uff1e**”**,但请求页上未指定字符集,则可能不会触发跨站点脚本冲突,除非将配置文件的默认字符集指定为 Unicode。
HTML 跨站点脚本检查