ADC

XML 跨站脚本检查

XML 跨站点脚本检查会检查 XML 有效负载中可能存在的跨站点脚本攻击的用户请求。如果发现可能的跨站点脚本攻击,则会阻止请求。

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

Web App Firewall 提供了实施 XML 跨站点脚本保护的各种操作选项。您可以选择配置“阻止”、“日志”和“统计”操作。

Web App Firewall XML 跨站点脚本检查是在传入请求的有效负载上执行的,即使攻击字符串分布在多条线路上,也会识别攻击字符串。该检查会在 元素属性 值中查找跨站点脚本攻击字符串。您可以在指定条件下应用放宽来绕过安全检查检查。日志和统计信息可帮助您确定所需的放宽。

XML 有效负载的 CDATA 部分对黑客来说可能是一个有吸引力的焦点领域,因为这些脚本不能在 CDATA 部分之外执行。CDATA 部分用于完全被视为字符数据的内容。HTML 标记标签分隔符 <>/>不会导致解析器将代码解释为 HTML 元素。以下示例显示了带有跨站点脚本攻击字符串的 CDATA 部分:

    <![CDATA[rn
    <script language="Javascript" type="text/javascript">alert ("Got you")</script>rn
    ]]>
<!--NeedCopy-->

操作选项

当 XML 跨站点脚本检查检测到请求中的跨站点脚本攻击时,将应用操作。以下选项可用于优化应用程序的 XML 跨站点脚本保护:

  • Block— 如果请求中检测到跨站点脚本标签,则会触发阻止操作。
  • Log— 生成指示 XML 跨站点脚本检查所执行操作的日志消息。如果禁用了块,则会为检测到跨站点脚本违规的每个位置(元素、属性)生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。您可以监视日志以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明尝试发起攻击。
  • 计信息— 收集有关冲突和日志的统计信息。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,以查看是否需要配置新的放宽规则或修改现有的放宽规则。

放宽规则

如果您的应用程序要求您绕过 XML 有效负载中的特定元素或属性的跨站点脚本检查,则可以配置放宽规则。XML 跨站点脚本检查放宽规则具有以下参数:

  • Name— 您可以使用文字字符串或正则表达式来配置元素或属性的名称。以下表达式免除以字符串名称 _ 开头的所有 EINSTERINS,后面是由大写或小写字母或数字组成的字符串,长度至少不超过 15 个字符组成的字符串:

    ^name_[0-9A-Za-z]{2,15}$

注意

名称区分大小写。不允许重复条目,但您可以使用名称和位置差异的大写来创建类似条目。例如,以下每个放宽规则都是唯一的:

  1. XMLcross-site scripting: ABC IsRegex: NOTREGEX Location: ATTRIBUTE State: ENABLED

  2. XMLcross-site scripting: ABC IsRegex: NOTREGEX Location: ELEMENT State: ENABLED

  3. XMLcross-site scripting: abc IsRegex: NOTREGEX Location: ELEMENT State: ENABLED

  4. XMLcross-site scripting: abc IsRegex: NOTREGEX Location: ATTRIBUTE State: ENABLED

  • 位置— 您可以在 XML 有效负载中指定跨站点脚本检查异常的位置。默认情况下,选项元素处于选中状态。您可以将其更改为属性。
  • 注释— 这是一个可选字段。您最多可以使用 255 个字符串来描述此放宽规则的目的。

警告

正则表达式非常强大。特别是如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的名称,而不是其他名称。粗心地使用正则表达式可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或允许 XML 跨站点脚本检查会阻止的攻击。

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

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

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

> set appfw profile <name> -XMLcross-site scriptingAction (([block] [log] [stats]) | [none])

使用命令行配置 XML 跨站点脚本检查放宽规则的步骤

您可以添加放宽规则以绕过在特定位置检查跨站点脚本脚本攻击检查。使用 bind 或取消绑定命令添加或删除放宽规则绑定,如下所示:

> bind appfw profile <name> -XMLcross-site scripting <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]

> unbind appfw profile <name> -XMLcross-site scripting <String>

例如

> bind appfw profile test_pr -XMLcross-site scripting ABC

执行上述命令后,配置了以下放宽规则。该规则处于启用状态,名称被视为文字 (NOTREGEX),并选择元素作为默认位置:

1)      XMLcross-site scripting:  ABC             IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

`> unbind appfw profile test_pr -XMLcross-site scripting abc`

ERROR: No such XMLcross-site scripting check

`> unbind appfw profile test_pr -XMLcross-site scripting ABC`

 Done
<!--NeedCopy-->

使用 GUI 配置 XML 跨站点脚本检查

在 GUI 中,您可以在窗格中为与应用程序关联的配置文件配置 XML 跨站点脚本检查。

使用 GUI 配置或修改 XML 跨站点脚本检查

  1. 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑
  2. 在 “高级设置” 窗格中,单击 “ 安全检查”。

安全检查表显示当前为所有安全检查配置的操作设置。您有 2 个配置选项:

a) 如果您只想启用或禁用 XML 跨站点脚本检查阻止日志统计操作,则可以选中或清除表中的复选框,单 确定,然后单击保存并关闭以关闭安全性检查窗格。

b) 您可以双击 XML 跨站点脚本,或者选择该行并单击 操作设置,以显示操作选项。更改任何操作设置后,单 击“确定”保存更改并返回“安全检查”表。

如果需要,您可以继续配置其他安全检查。单击确定以保存在“安全检查”部分中所做的所有更改,然后单击保存并关闭以关闭“安全性检查”窗格。

使用 GUI 配置 XML 跨站点脚本放宽规则

  1. 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑
  2. 高级设置 窗格中,单击 放宽规则
  3. 在“放宽规则”表中,双击 XML 跨站点脚本 条目,或将其选中,然后单击“编辑”。
  4. 在“XML 跨站点脚本放宽规则”对话框中,执行放宽规则的 添加编辑删除用或禁用 操作。

使用可视化工具管理 XML 跨站点脚本放宽规则

对于所有放宽规则的综合视图,可以突出显示“放宽规则”表中的 XML 跨站点脚本行,然后单击可视化工具。已部署放宽的可视化工具为您提供了添加新规则或编辑现有规则的选项。您还可以通过选择节点并单击放宽可视化工具中的相应按钮来启用禁用一组规则。

使用 GUI 查看或自定义跨站点脚本模式

您可以使用 GUI 查看或自定义跨站点脚本允许的属性或允许的标签的默认列表。您还可以查看或自定义跨站点脚本拒绝模式的默认列表。

默认列表在 Web App Firewall > 签名 > 默认签 名中指定。如果未将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认跨站点脚本允许和拒绝列表进行跨站点脚本安全检查处理。在默认签名对象中指定的标签、属性和板片是只读的。您无法编辑或修改它们。如果要修改或更改它们,请创建默认签名对象的副本以创建用户定义的签名对象。在新用户定义的签名对象中的“允许”或“拒绝”列表中进行更改,并在正在处理要使用这些自定义允许和拒绝列表的流量的配置文件中使用此签名对象。

有关签名的更多信息,请参阅http://support.citrix.com/proddocs/topic/ns-security-10-map/appfw-signatures-con.html

要查看默认跨站点脚本模式:

  1. 导航到 Web App Firewall > 签名 ,选择 *默认签名,然后单击 编辑 。然后单击管理 SQL/跨站点脚本模式

管理 SQL/ 跨站点脚本路径 ” 表显示了与跨站点脚本相关的以下三行:

           xss/allowed/attribute

           xss/allowed/tag

           xss/denied/pattern
<!--NeedCopy-->

选择一行,然后单击 管理元素 以显示 Web App Firewall 跨站点脚本检查使用的相应 跨站点脚本 元素(标记、属性、模式)。

自定义跨站点脚本元素:您可以编辑用户定义的签名对象以自定义允许的标记、允许的属性和拒绝的模式。您可以添加新条目或删除现有条目。

  1. 导航到 Web App Firewall > 签名,突出显示目标用户定义的签名,然后单击 编辑。单击管理 SQL/跨站点脚本模式以显示管理 SQL/跨站点脚本路径表。
  2. 选择目标跨站点脚本行。

a) 单击 管理元素加、 编辑删除 相应的跨站点脚本元素。

b) 单击“删除”以删除所选行。

警告

删除或修改任何默认的跨站点脚本元素,或者删除跨站点脚本路径以删除整行时,请务必非常小心。签名、HTML 跨站点脚本安全检查和 XML 跨站点脚本安全检查依赖于这些元素来检测攻击以保护您的应用程序。如果在编辑过程中删除所需模式,自定义跨站点脚本元素可能会使应用程序容易受到跨站点脚本攻击。

将日志功能与 XML 跨站脚本检查结合使用

启用日志操作后,XML 跨站点脚本安全检查冲突将作为 AppFW_XML_跨站点脚本 违规记录在审计日志中。Web App Firewall 支持本机和 CEF 日志格式。您也可以将日志发送到远程 syslog 服务器。

使用命令行访问日志消息

切换到 shell 并尾随 /var/log/ 文件夹中的 ns.log 以访问与 XML 跨站点脚本冲突相关的日志消息:

> \*\*Shell\*\*

> \*\*tail -f /var/log/ns.log | grep APPFW_XML_cross-site scripting\*\*
<!--NeedCopy-->

XML 跨站点脚本安全检查冲突日志消息以本机日志格式显示<blocked> 操作的示例

Oct  7 01:44:34 <local0.warn> 10.217.31.98 10/07/2015:01:44:34 GMT ns 0-PPE-1 : default APPFW APPFW_XML_cross-site scripting 1154 0 :  10.217.253.69 3466-PPE1 - owa_profile http://10.217.31.101/FFC/login.html Cross-site script check failed for field script="Bad tag: script" <\*\*blocked\*\*>
<!--NeedCopy-->

XML 跨站点脚本安全检查冲突日志消息以 CEF 日志格式显示<not blocked> 操作的示例

Oct  7 01:46:52 <local0.warn> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_XML_cross-site scripting|4|src=10.217.30.17 geolocation=Unknown spt=33141 method=GET request=http://10.217.31.101/FFC/login.html msg=Cross-site script check failed for field script="Bad tag: script" cn1=1607 cn2=3538 cs1=owa_profile cs2=PPE0 cs4=ERROR cs5=2015 act=\*\*not blocked\*\*
<!--NeedCopy-->

使用 GUI 访问日志消息

Citrix GUI 包括一个用于分析日志消息的有用工具(Syslog Viewer)。您有多个用于访问 Syslog 查看器的选项:

  • 导航到“Web App Firewall”>“配置 件”,选择目标配置文件,然后单击“安全检查”。突出显示 XML 跨站点脚本 行并单击 日志 。当您直接从配置文件的 XML 跨站点脚本检查访问日志时,GUI 会过滤掉日志消息,并仅显示与这些安全检查冲突相关的日志。

  • 您还可以通过导航到 Citrix ADC > 系统 > 审核 访问系统 日志查看器。在 审计消息 部分中,单击 Syslog 消息链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。

  • 导航到 Web App Firewall > 策略 > 审核 。在 审计消息 部分,单击 Syslog 消息 链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。

基于 XML 的 Syslog 查看器提供了各种筛选器选项,用于仅选择您感兴趣的日志消息。要为 XML 跨站点脚本 检查选择日志消息,请通过在 模块 的下拉选项中选择 APPFW 进行筛选。“事件类型”列表提供了一系列丰富的选项,以进一步优化您的选择。例如,如果选中 AppFW_XML_跨站点脚本 复选框并单击 应用 按钮,则系统日志查看器中只会显示与 XML 跨站点脚本安全检查冲突相关的日志消息。

如果将光标放在特定日志消息的行中,日志消息下方会显示多个选项,例如模块事件类型事件 ID客户端 IP 等。您可以选择这些选项中的任何一个以突出显示日志消息中的相应信息。

XML 跨站点脚本冲突的统计信息

启用统计操作时,当 Web App Firewall 对此安全检查采取任何操作时,XML 跨站点脚本检查的计数器将增加。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器的增量大小可能会因配置的设置而异。例如,如果启用了阻止操作,则对包含三个 XML 跨站点脚本冲突的页面的请求将统计数据计数器递增一个,因为一旦检测到第一个冲突,该页面就会被阻止。但是,如果禁用了块,则处理相同的请求会将冲突的统计数据计数器和日志增加三个,因为每个冲突都会生成一个单独的日志消息。

使用命令行显示 XML 跨站点脚本检查统计信息

在命令提示符下,键入:

> **sh appfw stats**

要显示特定配置文件的统计信息,请使用以下命令:

> **stat appfw profile** <profile name>

使用 GUI 显示 XML 跨站点脚本统计信息

  1. 导航到“系统”>“安全”>“Web App Firewall”。
  2. 在右窗格中,访问 统计信息 链接。
  3. 使用滚动条查看有关 XML 跨站点脚本冲突和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。
XML 跨站脚本检查