跨站脚本XSS
1.原理
跨站脚本攻击(简称XSS)通过在Web页面中插入恶意脚本,当访问者浏览该页面时,恶意脚本就在访问者的浏览器中偷偷运行,执行特定的任务或者窃取访问者的隐私信息并向第三方站点发送这些信息。
XSS可分为持久型(Persistent)和反射型(Reflective)两种类型。
持久型XSS因其会影响到Web服务器自身的安全而危害较大。攻击者通过XSS将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临被攻击的可能,其中包括了Web服务器的管理员。
反射型XSS一般存在于URL中,它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,URL中的恶意代码被HTML解析、执行。它的特点是非持久化、用户必须点击带有特定参数的链接才能引发但数量多。
攻击者利用XSS可以达到以下目的:
(1)盗取用户cookie。攻击者通过XSS可以窃取cookie,并发送给第三方页面,进而仿冒用户身份,造成用户隐私信息的泄露。
(2)嵌入恶意构造的脚本或页面。攻击者通过XSS可以嵌入恶意脚本或仿冒页面,执行特定的任务(如传播AJAX蠕虫)或者进行钓鱼攻击。
(3)结合客户端浏览器漏洞挂马。攻击者通过XSS,根据客户端所使用的浏览器,执行特定的恶意脚本,利用浏览器漏洞进行挂马。
2.实例
某银行的官方网站曾被曝存在XSS漏洞(目前银行网站的XSS漏洞都已修复),存在漏洞的页面地址是http://www.****.com.cn/news/hotspot.jsp。由于该页面没有对提交的数据进行验证或过滤就直接返回到页面上,导致漏洞的产生。例如,攻击者通过构造类似http://www.****.com.cn/news/hotspot.jsp?column=<iframe src=http://www.baidu.com>这样的URL请求就可以在该页面中插入百度的页面。
攻击者可以构造恶意脚本实现窃取用户个人信息或网页挂马。
3.防御方法
XSS本质上是Web应用服务的漏洞,因此主要的防御方法是在Web应用程序中消除XSS漏洞,具体如下:
(1)检验用户输入。Web应用程序在接收到用户提交的数据时,先对数据类型进行验证,如整形,日期型等,只有验证通过之后才继续执行。
(2)特殊字符进行过滤和替换。对用户输入和输出中的一些特殊字符进行统一的编码,以达到过滤特殊字符的目的。PHP和ASP都有自带的函数可对特殊字符进行编码,如PHP中的htmlspecialchars()函数和ASP中的HTMLEncode()函数。
(3)认证cookie设置HttpOnly属性。Web服务端可以设置如下的Http头信息将cookie的属性设为HttpOnly:Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:45:20 GMT; HttpOnly。带有HttpOnly属性的cookie对于document来说是不可见的,使得XSS攻击者不能再利用document.cookie窃取cookie信息,大大提升了Web应用的安全性。HttpOnly在IE6以上版本和Firefox较新版本中都得到了比较好的支持。
值得一提的是,Web应用服务端为防御XSS所作的基于特征字符串的过滤并不是万能的,XSS攻击者可以有多种方法绕过服务端的检测。下面列举几种常见的方法:
(1)在特征字符串中间增加一个或多个tab符:
<BGSOUND SRC="jav ascript:alert('XSS');">
(2)在特征字符串中间增加一个或多个换行符:
<BGSOUND SRC="jav
ascript:alert('XSS');">
(3)用注释符分割特征字符串:
<img style="xss:expr/*XSS*/ession([code])">
(4)对特征字符串进行编码:
<BGSOUND SRC=java& #x73cript :alert ('XSS')>
(5)在特征字符串之间插入会被替换为空的字符串:
{height:exp<SCRIPTression(***)}
(6)利用css写XSS代码:
<STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>
<DIV STYLE="width: expression(alert('XSS'));">
类似的方法还有很多,可以参考http://ha.ckers.org/xss.html。
总之,随着AJAX方式的Web应用的增多,XSS的攻击方式也变得更加多样化。XSS蠕虫就是XSS与AJAX技术结合之后的攻击方法。由于AJAX的特性,使得XSS蠕虫可以在用户不知情的情况下在后台偷偷运行,与服务器端进行交互,自我复制的功能使其具备像蠕虫病毒一样快速传播的特性。
Web安全是一项系统性的工程,只有努力提高安全意识,采取技术防范,执行安全规范,才能确保各个环节的安全。
来源:《中国教育网络》2009年9月刊