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 跨站点脚本保护:

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

放松规则

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

  • 名称-您可以使用文字字符串或正则表达式来配置 ELEMENT 或属性的名称。以下表达式豁免所有以字符串 name_ 开头的元素,后面是大写或小写字母或数字的字符串,长度至少为两个且不超过十五个字符:

    ^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 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),并选择 ELEMENT 作为默认位置:

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 跨站点脚本检查。

要配置或修改 XML 跨站点脚本,请使用 GUI 进行检查

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

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

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

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

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

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

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

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

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

使用 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_cross-site scripting 脚本违规。Web App Firewall 支持本机和 CEF 日志格式。您还可以将日志发送到远程 syslog 服务器。

使用命令行访问日志消息

切换到 shell 并跟踪 /var/log/ 文件夹中的 ns.logs,以访问与 XML 跨站脚本违规行为有关的日志消息:

> \*\*Shell\*\*

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

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

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-->

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

Oct  7 01:46:52 <local0.warn> 10.217.31.98 CEF:0|Citrix|NetScaler|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 访问日志消息

GUI 包含一个用于分析日志消息的有用工具(Syslog 查看器)。您可以通过多种方式访问 Syslog 查看器:

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

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

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

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

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

XML 跨站脚本违规的统计数据

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

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

在命令提示符下,键入:

> **sh appfw stats**

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

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

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

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