跨站脚本攻击(XSS)

作者:{Craftsman}@ArkTeam

跨站脚本攻击(Cross Site ScriptingXSS)主要发生在浏览器客户端,攻击者将恶意代码注入到Web站点,如果恶意代码没有经过过滤或者过滤敏感字符不严格,会迫使Web站点回显攻击者注入的恶意代码,最终被用户浏览器加载执行,从而影响到浏览网站页面的用户。跨站脚本攻击位列OWASP Top 10网站安全风险排名的第三名,其重要性不容小觑。

之所以称作XSS是为了与层叠样式表(Cascading Style Sheets, CSS)进行区分,攻击者注入的恶意代码主要包括危险的HTML标签、客户端脚本、其它能执行JS的容器等,大多数时候与JavaScript有关。注入恶意代码的形式有form表单注入、URL参数注入、Cookie注入、Header注入、媒体文件注入等。

跨站脚本攻击有三种类型,分别是反射型XSS、存储型XSSDOMXSS。其中,反射型XSS表现在Web客户端把数据提交到服务器时,如果Web服务器对用户提交的数据未经验证,输出到Web页面时也没有经过HTML编码,攻击者提交的恶意代码会注入到Web页面中;存储型XSS的攻击过程如图1所示,攻击者将恶意代码上传到Web服务器中被存储,Web页面读取服务器中存取的恶意代码直接输出到浏览器客户端;DOMXSS是由于浏览器客户端脚本自身解析不正确,导致可以修改Web页面中的DOM节点。


1存储型XSS攻击过程

不仅传统形式上的浏览器客户端会发生XSS攻击,一些使用Webkit引擎的PC端软件也存在XSS攻击,图2、图3、图4介绍了一种PCXSS攻击的案例。


2 金山词霸生词本构造JavaScript脚本


3 金山词霸PC端软件导入生词本


4 触发XSS攻击

XSS的危害性还是很大的,在Web 2.0以前,XSS攻击就已经存在,比较典型的危害有Cookie窃取、DOS浏览器、钓鱼攻击、劫持用户Web行为、内网渗透、网页挂马、蠕虫攻击、黑产、数据破坏等。因此,有人称跨站脚本攻击是一种新型的”缓冲区溢出攻击”,而JavaScript是一种新型的”ShellCode“。

随着用户与Web页面的输入输出交互越来越多,XSS漏洞导致的攻击频繁发生。为了防御XXS攻击,需要对所有用户提交的内容进行输入可靠性验证,这些内容包括URL、查询关键字、post数据等,同时保证输出到客户端浏览器页面的内容被妥善编码,谨慎选择对远程文件内容的引用(尤其是CSSJavaScript),使用session标记、验证码、同源策略、CSPHttpOnly等对敏感数据进行保护。

发表评论

电子邮件地址不会被公开。 必填项已用*标注