Web中XSS攻击检测与防范措施
2012-12-27
(河西学院信息技术中心,甘肃张掖734000)
Web中XSS攻击检测与防范措施
王志春
(河西学院信息技术中心,甘肃张掖734000)
XSS(跨站脚本)攻击,是恶意用户利用验证上的漏洞将脚本命令嵌入到可以显示的数据中,使其在另一个用户浏览时可以执行这些脚本命令.针对XSS漏洞屡遭攻击这一现状,通过对XSS漏洞的详尽分析,列举了对XSS漏洞攻击的检测方式和方法.根据攻击的特点,为系统的安全提出了相应的防御措施.
XSS;Web;跨站脚本;检测;防范
Web2.0网络使用户与网站的互动更加方便和频繁,用户在论坛发表评论或留言,既是网站内容的浏览者,也是网站内容的制造者.但是,也带来了网络安全隐患,跨站脚本(Cross-Site Scripting,XSS)漏洞就是Web应用程序漏洞中较为突出的一类.XSS攻击的原理是,访问者利用Web应用程序的漏洞,通过网页的输入框上传恶意的脚本代码,通常是JavaScript脚本片段,而这些恶意输入在提交后,重新读回客户端时会嵌入远程Web页面,当用户对此站点进行再次访问时,该用户的浏览器就会自动加载并解释执行这些恶意的脚本.借助于这种巧妙注入恶意的指令码到其它网域的服务网页的方法,攻击者可得到了更高的特权,窃取机密的网页内容、会谈的Cookie、以及许多其它的对象.
1 漏洞分类
根据漏洞形成的原因,跨站脚本漏洞大致可以分为以下3类:反射式跨站脚本漏洞、储存式跨站脚本漏洞和基于DOM的跨站点脚本漏洞.
1.1 反射式跨站脚本漏洞(Reflected XSS)
反射式跨站脚本是非持久性跨站脚本的另一个名称.当Web应用程序存在易受到这种攻击的漏洞时,它会将未经验证的数据通过请求发送给客户端.如果未经验证的客户端输入数据被直接包含在生成的页面中,便可能造成客户端脚本直接注入到动态页面中.常见的攻击手法一般通过攻击者创建并构造畸形URL实现,常见的攻击者代码是用JavaScript语言,但也会使用其它的脚本语言,例如,ActionS-cript和VBScript.攻击者通常会利用这些漏洞来安装键盘记录器、窃取受害者的cookie、窃取剪贴板内容、改变网页内容.
1.2 储存式跨站脚本漏洞(Stored XSS)
储存式跨站脚本是一种最危险的跨站脚本,允许用户存储数据的Web应用程序都有可能接触到这种类型的攻击.如果Web应用程序从恶意用户处收集了输入数据并将这些数据存储在数据库中以供今后使用,就可能会发生储存式跨站脚本攻击,因为存储的输入数据没有经过正确过滤,所以恶意数据将显示为网站的一部分并在Web应用程序授权下在用户浏览器中运行.当用户使用较高特权访问有存储式跨站脚本漏洞的网页时,那么储存跨站脚本将更加危险,比如管理员访问存在漏洞的网页时,浏览器会自动执行攻击,这就可能导致敏感信息泄露,如会话授权令牌.
1.3 基于DOM的跨站点脚本漏洞(DOM Based XSS )
基于DOM的跨站点脚本的实际名称是跨站脚本漏洞.该漏洞是动态网页内容的结果,一般是JavaScript,网页通过获取用户的输入,然后进行一些不安全的操作导致产生XSS漏洞,攻击者使用DOM元素和定制的代码以控制代码流程并改变流程.由于其性质,基于DOM的跨站点脚本漏洞可以在许多情况下执行.
2 漏洞检测
2.1 反射式XSS攻击检测
反射式XSS攻击是在URL地址的参数中嵌入脚本来实现的.这种XSS攻击比较简单,正常的URL中HTTP标记是不会出现的,只需检查URL中是否有HTTP的标记就可以知道是否有XSS攻击了.为了检测是否存在漏洞,必须需确定Web程序中的变量及其如何输入;输入无害的攻击字段触发浏览器以发现潜在的漏洞;针对已发现的漏洞进行攻击,评估是否会对Web程序的安全产生实际影响.这需要使用许多测试向量,每个测试向量避免不同的过滤程序.例如,执行下面的代码:
规则表达将检查是否插入了<script[anything but the character:'>']src,而类似的常见攻击<script src=“http://attacker.com/xss.js”></script>对于过滤表达式很有效果.但是也有可能在脚本和SRC间的属性中使用“>”字符绕过过滤程序,这将导致利用上述反射式跨站脚本漏洞.如:
2.2 存储式XXS检测
XSS漏洞最常出现在让用户输入信息并浏览的页面,比如任何有输入的地方:留言、回复、论坛、BLOG等.通常将脚本输入到被攻击站点的输入域中,提交后,脚本代码被储存在有漏洞的服务器上,当用户浏览此Web页面时该脚本就开始执行.应用程序存储的输入数据通常在HTML标记中使用,但它也可能在JavaScript内容中存在,通过分析HTML代码以确认输入数据是否存储并且如何在网页内容中定位来检测漏洞.通常在注册页面中需要输入邮箱,而包含邮箱值的HTML代码为:
输入验证/过滤控制脚本测试应用程序,脚本如下:
提交输入,如果实施客户端的安全控制,通常会导致禁用JavaScript或修改HTTP请求,如WebScarab.重新加载页面时浏览器存储输入并执行跨站脚本,上述注入结果导致弹出包含cookie值的窗口.注入后的HTML代码是:
如果Web应用程序允许文件上传,就需要检查是否有可能上传HTML内容.如果允许HTML或TXT文件,那么在文件上传时可能注入跨站脚本,需要验证上传的文件是否允许设置任意MIME类型.利用浏览器MIME的设计缺陷.例如,像JPG和GIF这种看似无害的文件可能包含一个跨站脚本,当浏览器装载这些文件时,就会执行该攻击.当image/gif等图像受到MIME攻击时,他们可能设置成文本/HTML格式.在这种情况下,客户端浏览器将把该文件视为HTML.
文件上传时的HTTP POST请求:
Internet Explorer不按照Mozilla Firefox或其他浏览器相似的方式处理MIME类型.例如,Internet Explorer将包含HTML内容的TXT文件视为HTML内容.
2.3 基于DOM的XXS检测
反射式和储存式漏洞是通过服务器传递跨站脚本中的参数,返回给用户并在用户的浏览器中执行,不需要服务器确定哪些需要执行,导致许多一般的跨站脚本过滤和检测规则对此类攻击无能为力.假设使用下面的客户端代码:
攻击者可能给受感染页面追加#<script>alert('xss')</script>,导致在执行该脚本时会显示警告框,由于浏览器认为凡是有#字符都不是查询的一部分,而只是一个片段,因此不会将附加的代码发送给服务器.而JavaScript的应用程序跟他类型的应用程序有很大不同,他们往往是服务器动态生成的.
服务器端将数据插入到JavaScript:
客户端JavaScript对象的输入:
当通过服务器获得输入时,服务器可以使用任何方式排列数据,而JavaScript对象执行的排列却清楚易懂并便于记录.
2.4 绕过JavaScript的XSS检测
有很多工具可以在浏览器发送Get/Post请求前将其截取,攻击者可以修改请求中的数据,从而绕过JavaScript的检验将恶意数据注入服务器.通过Web应用程序这个中间载体,窃取受害者客户端的cookie或其他信息以冒充正常客户在Web应用程序上进行认证,从而完成攻击.以下是一些常用的截取HTTP请求的工具:
这些工具可以被攻击者用来截取并修改数据达到攻击的目的,同时也可以用来对Web应用程序进行安全性测试.利用上述工具截取Web应用程序发送的数据并修改,主动向被测试的Web站点发送修改后的XSS输入,通过判断输入输出的情况,可以达到对Web站点进行XSS漏洞检测的目的.
TamperIE小巧易用,能绕过客户端浏览器JavaScript的校验,监视IE浏览器与服务器之间的HTTP通信,截取IE浏览器发送的Get/Post请求,修改其中的数据,然后再发送修改后的数据到服务器.如图1所示:
图1 TamperIE修改
3 XSS防范
XSS攻击主要是利用程序中存在的漏洞,在用户和WEB交互的过程中进行,所以需要在编码和用户两方面采取相应的防范措施.
3.1 编码中防范措施
输入验证:用户与网站进行交互的数据被显示或存储前,使用输入验证机制对用户输入的数据进行确认,检测输入数据的长度、类型和语法规则,保证输入数据的长度不能太长、包含合法的字符并且与相应的正则表达式相匹配.
字符串过滤:网站对用户提交的数据应进行HTML编码,过滤恶意字符;保证浏览器可以安全的处理恶意代码,把恶意的字符当作是HTML文档的内容而非是结构;禁止用户提交该类代码,这类字符主要包括“<>”“%;()&+-”等.需要注意的是,仅查找或替换一些如“<”、“>”或类似“script”的关键字,很容易被XSS变种攻击绕过验证机制.
指定编码方式:确保数据输出前用户提交的数据已被正确进行编码,对所有字符进行编码而不仅局限于某个子集.明确指定输出的编码方式如UTF8,不要允许攻击者选择编码方式.
3.2 用户的防范措施
访问可信任的站点,而且在访问信任站点的时候最好是通过地址栏直接输入地址进行访问而不是通过其他站点的链接;不要轻易访问其他人给你的链接,特别是跟了很长一段字符串的链接,因为这段字符可能是恶意的脚本进行编码后的结果;禁止浏览器直接不经过任何限制的运行JavaScript或者ActiveX.;定时对防病毒软件和防火墙进行升级.从网站用户角度.当你打开一封Email或附浏览论坛帖子时,可能恶意脚本会自动执行,因此,在做这些操作时一定要特别谨慎.建议在浏览器设置中关闭JavaScript.
4 结束语
XSS不同于普通的针对网站或者服务器的攻击,是一种危害较大、较难防范并且隐蔽的攻击方式.由于不易引起网站开发者的注意和重视,XSS攻击才会对网站的访问者造成非常大的安全威胁,所以XSS漏洞和攻击的防范不仅需要网站开发者的重视,也需要浏览器的支持,以及用户安全意识的提高.
[1]达斯孟,陆永忠,宁峰.客户端跨站脚本攻击的分层防御策略[J].计算机系统应用,2010(02).
[2]陈建青,张玉清.Web跨站脚本漏洞检测工具的设计与实现[J].计算机工程,2010(06).
[3]罗来曦,朱渔.XSS跨站脚本攻击方法初探[J].宜春学院学报,2009(06).
[4]孙握瑜,张业睿.跨站脚本攻击原理与防范方法研究[J].内江科技,2010(05).
[5]赵玉龙,张旋,刘梦瑶,李沁蕾.跨站脚本攻击实践及防范[J].网络安全技术与应用,2010(07).
TP39
A
1008-7974(2012)08-0027-03
2012-03-05
王志春(1976-),男,陕西洋县人,河西学院信息技术中心讲师.
(责任编辑:王前)