脚本能够“跨站”的原因

    XSS是跨站脚本(Cross Site Script)的意思,由于网站技术中的Cascading Style Sheets被缩写为CSS,为了不至于产生概念混淆,故一般用XSS来简称跨站脚本。
从数量上讲,XSS是目前所有漏洞中所占比例最大的一类,编程时稍不留意就会产生这种漏洞,而且防不胜防。
    在很多Web应用中,服务器都将客户端输入或请求的数据“经过简单的加工”后,再以页面文本的形式返回给客户端,例如,搜索引擎将用户输入的搜索串返回在页面中;运行出错时将用户输入的信息返回在错误提示页面中;论坛中显示用户提交的帖子等。
    在这些Web应用中,如果对用户输入“加工”过于简单,就会产生XSS漏洞。例如,下面这种代码对用户输入的数据没有经过任何“加工”,就直接返回给了客户端。
echo $input
?>
    当用户进行正常的请求:
http://testapp.com/test.php?input=this is a test
    服务器将简单地把“this is a test”返回给客户端的浏览器,浏览器解析后会将这段文本显示在页面中。
    但是,当遇到类似下面这样的请求时:
图11.3.1 跨站脚本的测试用例
    类似的,在搜索引擎、错误提示页面、论坛空间等Web应用中,如果对用户输入的数据没有经过很好的过滤,***者很可能利用这些“可信”的网站使用户的浏览器执行一些恶意的脚本。
    XSS漏洞产生于Web服务器把用户输入数据直接返回给客户端。与SQL注入***不同,这种***一般不能对Web服务器造成恶劣的影响,而只是利用Web服务器作为桥梁去***普通用户。跨站脚本中的“站”就是指被利用的Web服务器。
    题外话:以上提法实际不够严密。随着XSS蠕虫的出现,XSS对服务器的***也逐渐得到重视。
    比起执行shellcode获得远程控制的缓冲区溢出漏洞或者***数据库控制网站的SQL注入漏洞来说,很多***者和安全专家都对XSS漏洞不以为然,因为几句脚本命令的***效果非常有限,可能只能做到类似窃取cookie之类的事。
    针对这个误区,我需要再指明两点:首先,XSS***的目标是客户端的浏览器,因此受影响的范围要远远大于***服务器的SQL注入***;其次,独立的XSS漏洞***并不是非常严重,但是配合上其他***技术往往能产生非常严重的后果。因此,本节特意设计了几个典型的XSS利用场景,让您更深刻地理解这种漏洞的危害。
本文节选自电子工业出版社2008年4月出版的 《0day安全:软件漏洞分析技术》一书。
到当当网购买
到卓越网购买
到china-pub购买
 
浏览更多精彩文章>>
订阅软件安全电子期刊>>