NetScaler

HTML跨站点脚本检查

HTML跨站点脚本(XSS)检查检查用户请求的标题和帖子正文是否存在可能的跨站点脚本攻击。如果找到跨站点脚本,则会修改(转换)请求使攻击无害,或阻塞请求。

注意:

HTML跨站点脚本(XSS)检查仅适用于内容类型,内容长度等。它不适用于cookie。另请确保在Web应用程序防火墙配置文件中启用“CheckRequestHeaders”选项。

为了防止在受保护的网站上滥用脚本而破坏网站的安全,HTML跨站点脚本检查将阻止违反同源规则,它规定脚本不应访问或修改它们所在服务器以外的任何服务器上的内容。任何违反同源规则的脚本称为跨站点脚本,使用脚本访问或修改另一个服务器上的内容的实践称为跨站点脚本。跨站脚本之所以是一个安全问题,是因为允许跨站脚本的web服务器可能会被攻击,攻击者可以使用不在该web服务器上的脚本,而是在另一个web服务器上的脚本,比如攻击者拥有和控制的服务器。

不幸的是,许多公司都安装了大量javascript增强的web内容,这些内容违反了同源规则。如果您在这样的站点上启用HTML跨站点脚本检查,您必须生成适当的异常,这样检查才不会阻止合法的活动。

App Firewall提供了各种操作选项,可实现HTML跨站点脚本保护。除了日志统计学习操作,您也可以选择改变跨站点脚本通过在提交的请求中对脚本标记进行实体编码,使攻击变得无害。您可以配置“检查跨站脚本的完整URL”参数,以指定您是否不仅要检查查询参数,而且要检查整个URL来检测XSS攻击。您可以配置检查请求查询非HTML无论内容类型如何,要检查请求查询部分的xss攻击。

你可以放松来避免假阳性。App Firewall学习引擎可以提供配置放松规则的建议。

以下选项可用于为您的应用程序配置优化的HTML跨站点脚本保护:

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

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

  • 检查跨站点脚本的完整url-如果启用了对完整URL的检查,应用程序防火墙将检查整个URL是否存在HTML跨站点脚本攻击,而不是只检查URL的查询部分。
  • 检查请求头-如果启用了请求标头检查,应用程序防火墙将检查HTML跨站点脚本攻击请求的标头,而不仅仅是URL。如果使用GUI,可以在应用程序防火墙配置文件的设置选项卡中启用此参数。
  • 检查请求查询非HTML- 如果启用了请求查询检查,则应用程序防火墙检查跨站点脚本攻击的请求的查询,而不管内容类型如何。如果使用GUI,则可以在App Firewall配置文件的“设置”选项卡中启用此参数。

重要的

作为流变化的一部分,跨站脚本标记的应用防火墙处理也发生了变化。此更改适用于11.0构建之后的版本。这个更改也适用于10.5的增强构建。支持请求端流。在较早的版本中,左括号(<)或右括号(>)或左括号和右括号(<>)的出现都被标记为跨站点脚本冲突。在支持请求端流的构建中,行为发生了变化。只有右括号字符(>)不再被认为是攻击。即使出现了一个左括号字符(<),请求也会被阻止,并被认为是一种攻击。跨站点脚本攻击被标记。

XSS细粒松弛

App FireWall为您提供了一种选项来豁免特定的表单字段,标题或Cookie从跨站点脚本检查检查。通过配置放松规则,您可以完全绕过一个或多个这些字段的检查。

应用防火墙允许您通过微调放松规则来实现更严格的安全。应用程序可能需要允许特定模式的灵活性,但是配置放松规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何跨站点脚本攻击模式的检查。跨站点脚本细粒度放松提供了允许特定属性、标记和模式的选项。其余的属性、标记和模式将被阻塞。例如,应用程序防火墙目前有超过125个默认拒绝模式。由于黑客可以在跨站点脚本攻击中使用这些模式,应用程序防火墙将它们标记为潜在威胁。您可以放松一个或多个被认为对特定位置安全的模式。其余潜在危险的XSS模式仍然会检查目标位置,并继续触发安全检查违规。你现在有更严格的控制。

用于松弛的命令有可选参数值类型价值表达式.值类型可以留空,或者您可以选择选择标签属性模式.如果不设置该值类型,则指定URL的配置字段不受跨站脚本检查检查的影响。如果选择值类型,则必须提供值表达式。可以指定值表达式是正则表达式还是字面值字符串。当输入与允许和拒绝列表匹配时,只有在放松规则中配置的指定表达式被豁免。

应用防火墙有以下XSS内置列表:

  1. XSS允许属性:有52个默认允许属性,如,简写的accesskey对齐alt告诉我们边境细胞填充单元格间距字符charoff字符集等等
  2. XSS允许标签:有47个默认允许的标记,例如:地址basefont背景音乐重要的引用bgbr标题中心引用dd等等
  3. XSS否认模式:有129个默认拒绝模式,如,FSCommandjavascript:onAbort激活等等

警告

应用防火墙动作url是正则表达式。在配置HTML跨站点脚本放松规则时,可以指定的名字,及价值表达式是literal或RegEx。正则表达式很强大。特别是如果您不完全熟悉pcre格式的正则表达式,请仔细检查您编写的任何正则表达式。确保它们准确地定义了您想要添加为例外的规则,而不是其他规则。的粗心使用通配符,尤其是dot-asterisk(. *)元字符/通配符组合,你不希望有结果,如阻止访问web内容,你不打算阻止或允许一个HTML跨站点脚本攻击检查本来会阻塞。

点考虑:

  • 值表达式是一个可选参数。字段名可能没有任何值表达式。
  • 一个字段名可以绑定到多个值表达式。
  • 值表达式应该被赋值类型。XSS值类型可以是:1)标签,2)属性,或3)模式。
  • 每个字段名/URL组合可以有多个放松规则
  • 表单字段名和动作url不区分大小写。

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

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

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

  • 设置appfw配置文件“参数说明见页面底部。”)
  • -crossSiteScriptingAction (([block] [learn] [log] [stats]) | [**none**])
  • 设置appfw配置文件“参数说明见页面底部。”)
  • **-crossSiteScriptingTransformUnsafeHTML** (ON | OFF) **-crossSiteScriptingTransformUnsafeHTML** (ON | OFF)
  • 设置appfw配置文件参数说明在页面底部提供。
  • -crossSiteScriptingCheckCompleteURLs (ON | OFF)
  • 设置appfw配置文件参数说明在页面底部提供。
  • -checkRequestHeaders (ON | OFF)参数说明在页面底部提供。
  • -CheckRequestQueryNonHtml (ON | OFF) -CheckRequestQueryNonHtml (ON | OFF)参数说明在页面底部提供。

使用命令行配置HTML跨站点脚本检查放松规则

使用bind或unbind命令添加或删除绑定,如下所示:

  • 绑定appfw profile -crossSiteScripting [isRegex (REGEX | NOTREGEX)] [-location ] [-valueType (Tag|Attribute|Pattern) [] [-isValueRegex (REGEX | NOTREGEX)]]
  • unbind appfw配置文件 -crosssitescripting [--location ] [-valueType(标记|属性|模式)[]]

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

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

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

  1. 导航到应用防火墙>配置文件,高亮显示目标配置文件,然后单击编辑
  2. 在“高级设置”窗格中,单击安全检查

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

a.如果您想启用或禁用日志统计,及学习操作,您可以选择或清除表中的复选框,单击好吧,然后单击保存并关闭关闭“安全检查”窗格。

b.如果需要为此安全检查配置其他选项,请双击HTML跨站点脚本编制,或选中该行,单击动作设置,显示以下选项:

改变跨站点脚本-转换不安全的脚本标记。

检查跨站点脚本的完整url-不要只检查URL的查询部分,而要检查完整的URL是否存在跨站脚本冲突。

更改上述任何设置后,单击好吧保存更改并返回Security Checks表。如果需要,您可以继续配置其他安全检查。点击好吧保存在“安全性检查”部分中所做的所有更改,然后单击保存并关闭关闭安全检查窗格。

启用或禁用检查请求头的设置,高级设置窗格,点击配置文件设置.在常见的设置,选择或清除检查请求头复选框。点击好吧.您可以使用配置文件设置窗格的右上角的X图标关闭此部分,或者,如果已完成配置此配置文件,则可以单击完成回到应用防火墙>轮廓

启用或禁用检查请求查询非HTML的设置,高级设置窗格,点击配置文件设置.在常见的设置,选择或清除检查请求查询非HTML复选框。点击好吧.您可以使用在右上角的X图标配置文件设置窗格以关闭此部分,或者,如果您已完成配置此概要文件,则可以单击完成回到App Firewall >配置文件

使用GUI配置HTML跨站点脚本松弛规则

  1. 导航到应用防火墙>配置文件,高亮显示目标配置文件,然后单击编辑
  2. 高级设置窗格,点击放松规则
  3. 在relaxationrules表中,双击HTML跨站点脚本编制输入,或选择它并单击编辑
  4. HTML跨站点脚本放松规则对话框,执行添加编辑删除启用,或禁用松弛规则的操作。

请注意

当您添加新规则时,价值表达式除非您选择,否则不会显示字段标签属性模式选项值类型字段。

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

对于所有放松规则的统一视图,您可以突出显示HTML跨站点脚本编制放松规则表中的行,然后单击视觉型的人. 部署放松的可视化工具为您提供了添加新规则或编辑一个现有的。你也可以启用禁用通过选择一个节点并单击松弛可视化工具中相应的按钮来生成一组规则。

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

您可以使用GUI查看或自定义XSS允许的属性或允许的标记的默认列表。您还可以查看或自定义XSS拒绝模式的默认列表。

默认列表在应用防火墙>签名>默认签名.如果您没有将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认XSS允许和拒绝列表进行跨站脚本安全检查处理。在默认签名对象中指定的标签、属性和模式是只读的。您不能编辑或修改它们。如果需要修改或更改,请复制“默认签名”,创建自定义签名。在新的自定义签名对象中修改允许或拒绝列表,并在正在处理您想要使用这些自定义允许和拒绝列表的流量的配置文件中使用该签名对象。

有关签名,请参阅以下主题。。

  1. 查看默认XSS模式:

一个导航。应用防火墙>签名中,选择*默认签名,然后单击编辑.然后单击管理SQL/XSS模式

他们管理SQL / XSS路径下表显示了与XSS相关的三行内容:

xss/allowed/attribute

xss /允许/标记

XSS /被拒绝/模式

b.选择一行,单击管理元素显示应用防火墙使用的相应的XSS元素(标签,属性,模式)跨站点脚本编制检查。

  1. 自定义XSS元素:可编辑自定义签名对象,自定义允许的标签、允许的属性和禁止的模式。您可以添加新条目或删除现有条目。

一个导航。应用防火墙>签名,选中目标自定义签名,单击编辑. 点击管理SQL/XSS模式来显示管理SQL / XSS路径桌子

b、 选择目标XSS行。

我点击管理元素,添加编辑消除对应的XSS元素。

2点击消除删除选定的行。

警告

在删除或修改任何默认的XSS元素或删除XSS路径以删除整个行之前,必须非常小心。签名规则和跨站点脚本安全检查依赖于这些元素来检测攻击以保护应用程序。如果在编辑过程中删除了所需的模式,自定义XSS元素会使应用程序容易受到跨站点脚本攻击。

使用HTML跨站点脚本检查的学习功能

启用学习动作后,App Firewall学习引擎将对流量进行监控,并对触发的违规行为进行学习。您可以定期检查这些学习到的规则。经过适当的考虑后,您可以将学到的规则部署为HTML跨站点脚本放松规则。

HTML跨站点脚本学习增强- 在NetScaler软件的版本11.0中引入了App Firewall学习增强。要部署细粒度的HTML跨站点脚本放松,App防火墙提供了细粒度的HTML跨站点脚本学习。学习引擎对观察到的值类型(标签,属性,模式)和在输入字段中观察到的相应值表达式提出建议。除了检查阻止请求以确定当前规则是否过度限制并且需要放宽,您可以查看学习引擎生成的规则,以确定哪个值类型和值表达式触发违规,并且需要在放松中寻址规则。

请注意

App Firewall的学习引擎只能分辨名字的前128个字节。如果一个表单有多个名称匹配前128字节的字段,学习引擎可能无法区分它们。类似地,部署的放松规则可能会无意中放松HTML跨站点脚本检查中的所有此类字段。提示

超过12个字符的XSS标签不会被正确学习或记录。

如果您需要一个更大的标签长度来学习,您可以添加一个大的不出现的标签AS_XSS_ALLOWED_TAGS_LIST“x”的长度。

使用命令行界面查看或使用学习数据

在命令提示符处,输入以下命令之一:

  • 显示AppFW LearningData 十字架胶带
  • rm appfw learningdata -crossSiteScripting [] [ ]
  • export appfw learningdata **crossSiteScripting* . txt * . txt * . txt * . txt

通过使用GUI查看或使用学到的数据

  1. 导航到应用防火墙>配置文件,高亮显示目标配置文件,然后单击编辑
  2. 高级设置窗格,点击学习规则。您可以选择HTML跨站点脚本编制条目,并双击它以访问学到的规则。表格显示字段名A.引发反应的URL值类型价值,* *列。您可以部署学到的规则,或者在将规则作为放松规则部署之前编辑规则。若要丢弃规则,可以选择该规则并单击跳过按钮。一次只能编辑一个规则,但可以选择多个规则部署或跳过。

您还可以选择通过选择来显示学到的放松的概要视图HTML跨站点脚本编制条目,并单击视觉型的人获取所有学习到的违规行为的整合视图。visualizer使管理学习到的规则变得简单。它在一个屏幕上显示数据的全面视图,并有助于通过单击对一组规则执行操作。visualizer的最大优点是它推荐正则表达式来整合多个规则les。您可以根据分隔符和操作URL选择这些规则的子集。通过从下拉列表中选择数字,您可以在可视化工具中显示25、50或75条规则。学习规则可视化工具提供了编辑规则并将其部署为松弛的选项。或者,您可以跳过规则以忽略它们。

使用带有HTML跨站点脚本检查的日志功能

当日志动作被启用时,HTML跨站点脚本安全检查违规将被记录在审计日志中APPFW_XSS违规。App Firewall同时支持Native和CEF日志格式。您也可以将日志发送到远程syslog服务器。

通过命令行访问日志信息

切换到壳层,在ns后面。/var/log/文件夹中的日志,以访问与HTML跨站脚本违规相关的日志消息:

壳牌tail -f /var/log/ns.log | grep APPFW_XSS . tail

CEF日志格式的跨站点脚本安全检查违规日志消息的示例

ju11 00:45:51  10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|**APPFW_XSS**|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**

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

7月11日01:00:28  10.217.31.98 07/11/2015 01:00:28 GMT ns 0- pe -0: default APPFW **APPFW_XSS** 132 0:392 - ppe0 10.217.253.62 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特殊* *跨站点脚本在字段<转换>**中看到的字符

使用GUI访问日志消息

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

  • 导航到应用防火墙>配置文件,选择目标概要文件,单击安全检查.突出了HTML跨站点脚本编制行并单击日志.当您直接从配置文件的HTML跨站点脚本检查访问日志时,GUI会过滤掉日志消息,并只显示与这些安全检查违规相关的日志。
  • 您还可以通过导航到来访问Syslog查看器NetScaler>系统>审计。在“审核消息”部分中,单击syslog消息链接显示Syslog查看器,该查看器显示所有日志消息,包括其他违反安全检查的日志。这对于在请求处理期间可能触发多个安全检查违规时进行调试非常有用。
  • 导航到应用防火墙>政策>审计。在“审核消息”部分中,单击syslog消息链接显示Syslog查看器,该查看器显示所有日志消息,包括其他违反安全检查的日志。

基于HTML的Syslog查看器提供了各种筛选选项,只选择您感兴趣的日志消息。为。选择日志消息HTML跨站点脚本编制通过选择检查,过滤APPFW在下拉列表选项中模块.的事件类型List提供了一组丰富的选项,以进一步完善您的选择。例如,如果您选择APPFW_XSS选中该复选框并单击应用按钮,则只有与HTML跨站点脚本安全检查违规相关的日志消息会出现在Syslog查看器中。

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

单击部署功能仅在GUI中可用。您不仅可以使用Syslog查看器查看日志,还可以根据日志信息部署HTML跨站脚本放松规则,以防范App Firewall安全检查违规行为。该操作的日志信息必须为CEF日志格式。单击以部署功能仅对由块(或非块)操作生成的日志消息可用。不能为有关转换操作的日志消息部署松弛规则。

要从Syslog查看器部署松弛规则,请选择日志消息。屏幕右上角将显示一个复选框Syslog查看器框。选中该复选框,然后从中选择一个选项行动列表以部署松弛规则。编辑和部署部署,及部署所有可作为行动选项。

控件部署的HTML跨站点脚本规则单击部署选项不包括细粒度松弛建议。

要在GUI中使用“单击部署”功能

  1. 在Syslog查看器中,选择APPFW模块选项。
  2. 选择APP_XSS随着事件类型过滤相应的日志消息。
  3. 选择复选框以标识要部署的规则。
  4. 使用行动部署松弛规则的选项下拉列表。
  5. 验证该规则是否出现在相应的松弛规则部分。

HTML跨站点脚本违规的统计数据

当启用stats动作时,当应用防火墙对该安全检查采取任何动作时,HTML跨站点脚本检查的计数器将增加。统计“速率”、“流量总数”、“违规项”和“日志”。日志计数器的增量大小可以根据配置的设置而变化。例如,如果启用了阻止操作,对包含3个HTML跨站点脚本违规的页面的请求将使统计计数器增加1,因为当检测到第一个违规时,该页面将被阻止。但是,如果禁用了block,则处理同一个请求时,违规和日志的统计计数器将增加3个,因为每一个违规都会生成单独的日志消息。

要显示HTML跨站点脚本,请使用命令行检查统计数据

在命令提示符处,输入:

> sh appfw stats

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

>**统计应用程序配置文件**<配置文件名称>

通过使用GUI显示HTML跨站点脚本统计信息

  1. 导航到安全>应用程序防火墙>配置文件>统计信息
  2. 在右侧窗格中,访问统计数据链接。
  3. 使用滚动条查看关于HTML跨站点脚本违规和日志的统计信息。统计表提供实时数据,每7秒更新一次。

突出了

请注意有关HTML跨站点脚本检查的以下几点:

  • 内置支持HTML跨站点脚本攻击保护- NetScaler应用防火墙通过监控允许的属性和标签的组合,以及接收的有效负载中的拒绝模式,来防止跨站脚本攻击。XSS检查使用的所有内置默认允许的标记、允许的属性和拒绝的模式都在/netscaler/default_custom_settings.xml文件中指定。
  • Customization -您可以更改默认的标记、属性和模式列表,以根据应用程序的特定需求定制跨站点脚本安全检查。复制默认签名对象、修改已有条目或添加新条目。将此签名对象绑定到您的配置文件以使用自定义配置。
  • 混合的安全模型- 签名和深度安全保护使用绑定到配置文件的签名对象中指定的SQL / XSS模式。如果没有签名对象绑定到配置文件,则使用默认签名对象中存在的SQL / XSS模式。
  • 使改变-关于转换操作,注意以下几点:

转换操作独立于其他跨站点脚本操作设置。如果transform被启用,并且block、log、stats和learn都被禁用,那么XSS标签将被转换。

如果启用了块动作,则其优先于变换动作。

  • 细粒度放松和学习- 调整放松规则,放宽XSS元素的子集免受安全检查检查,但检测其余部分。学习引擎推荐基于观察到的数据的特定值类型和值表达式。
  • 点击DeploY-SELECT ONE,SYSLOG VIEWER中的一个或多个XSS违规日志消息,并将其部署为放松规则。
  • 字符集- 应根据应用程序设置配置文件的默认查询集。默认情况下,配置文件charset设置为英语US(ISO-8859-1)。如果在没有指定的Charset的情况下收到请求,则App防火墙将处理请求,就像ISO-8859-1一样。如果这些字符在其他CharSET中编码,则打开括号字符(<)或关闭括号字符(>)将不会被解释为xss标记。例如,如果请求包含UTF-8字符串“% uff1cscript % uff1e“但是在请求页面上未指定charset,除非配置文件的默认查询集被指定为Unicode,否则可能无法触发XSS违规。