Web中XSS攻击检测与防范措施
王志春
【摘 要】摘要:XSS(跨站脚本)攻击,是恶意用户利用验证上的漏洞将脚本命令嵌入到可以显示的数据中,使其在另一个用户浏览时可以执行这些脚本命令.针对XSS漏洞屡遭攻击这一现状,通过对XSS漏洞的详尽分析,列举了对XSS漏洞攻击的检测方式和方法.根据攻击的特点,为系统的安全提出了相应的防御措施.
【期刊名称】通化师范学院学报 【年(卷),期】2012(033)008 【总页数】3
【关键词】关键词: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代码为: