本文主要介绍了XSS漏洞分类、危害以及XSS 漏洞防护方法。
1.XSS漏洞简介
XSS是 Cross Site Scripting的简写,即跨站脚本攻击,为了避免和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故缩写为 XSS。
恶意攻击者往 Web 页面里插入恶意 HTML 代码,当用户浏览该页时,嵌入 Web 里面 的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
2.XSS漏洞分类
按照 XSS 的不同,可以分为如下几种类型:
反射型 XSS
反射型 XSS 指的是把用户输入的数据“反射”给浏览器,也就是黑客通常需要诱使用 户“点击”一个恶意的链接。
攻击者会通过社会工程学手段,发送一个URL链接给用户打开,或者在 IM、论坛、博客 上发放URL诱使用户点击,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。
存储型 XSS
存储型 XSS 会把用户输入的数据存储在服务器端。当其他用户访问到展示这个数据的 页面就会被攻击。
攻击者利用 Web 应用程序提供的录入或修改数据功能,将数据存储到服务器或用户 Cookie 中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。 所有浏览者都会受到攻击。
DOM 型 XSS
DOM 型 XSS 的分类并不是按照上面数据是否存储在服务端分类,而是比较特别的一 类 XSS,通过修改页面的 DOM 节点形成 XSS。和以上两个跨站攻击的差别是,DOM 跨站 是纯页面脚本的输出,只有规范使用 JavaScript,才可以防御。
3.XSS漏洞危害
XSS 漏洞可以偷取用户令牌 Cookie,伪造用户身份登录进行恶意操作,这是最常见的。 同时,还可以控制用户浏览器,获取用户键盘记录如用户输入的用户名密码,进行扫描内 网。比较高级的用法可以结合浏览器自身和浏览器插件的漏洞,下载病毒木马,深入攻击, 例如衍生 URL 跳转攻击、蠕虫攻击、DDoS 攻击、盲打后台等。
4.XSS 漏洞防护
针对 XSS 漏洞的防护,其核心问题在于对用户的输入没有进行验证和过滤,对于可信 和不可信边界的划分也是所有安全问题的核心。要针对 XSS 进行防护,需要根据上面不同 的攻击类型进行处理。以“谁使用,谁负责”的原则,任何使用用户不可信数据方都需要对数据进行校验,不信任任何来自客户端的用户输入,对于 XSS 来说,根据不同的应用场 景进行过滤。如果是不需要显示富文本的地方,直接对所有的 HTML 转义处理,反射性和 存储型可以在后端进行转义后输出到前端;如果是 DOM 型的需要在前端使用 JavaScript 进行转义;如果需要显示富文本,就需要对用户输入进行严格的限制。开源项目 OWASP AntiSamy 是一个可确保用户输入的 HTML/CSS 符合应用规范的 API,更多通过这个开源项目来对 XSS 漏洞进行防护的信息,具体可以参考其官方文档。
参考文献:《云原生应用架构实践》 网易云基础服务架构团队著