跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
由于和另一种网页技术——层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故把原本的CSS简称为XSS。
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL(结合社会工程学),当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行。
XSS产生原因:
(1)Web浏览器本身的设计是不安全的。浏览器包含了解析和执行JavaScript等脚本语言的能力,这些语言可用来创建各种格式丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否恶意。
(2)输入与输出是Web应用程序最基本的交互,在这过程之中若没做好安全防护,Web程序很容易会出现XSS漏洞。
(3)现在的应用程序大部分是通过团队合作完成的,程序员之间的水平参差不齐,很少有人受过正规的安全培训,因此,开发出来的产品难免存在问题。
(4)不管是开发人员还是安全工程师,很多都没有真正意识到 XSS 漏洞的危害,导致这类漏洞普遍受到忽视。很多企业甚至缺乏专门的安全工程师,或者不愿意在安全问题上花费更多的时间和成本。
(5)触发跨站脚本的方式非常简单,只要向 HTML 代码中注入脚本即可,而且执行此类攻击的手段众多,譬如利用CSS、Flash等。XSS技术的运用如此灵活多变,要做到完全防御是一件相当困难的事情。
(6)随着Web 2.0的流行,网站上交互功能越来越丰富。Web 2.0鼓励信息分享与交互,这样用户就有了更多的机会去查看和修改他人的信息,比如通过论坛、Blog 或社交网络,于是黑客也就有了更广阔的空间发动XSS攻击。