XSS 让攻击者把恶意脚本注入受害者浏览器,在目标网站的上下文中执行,可窃取 Cookie、伪造操作、传播蠕虫。2005 年 MySpace Samy 蠕虫在 20 小时内感染百万用户,是 XSS 危害最广为人知的案例。

| 历史里程碑 | 2005 年 Samy 蠕虫,20 小时感染 100 万 MySpace 用户 |
| OWASP 2021 排名 | A03 注入子类 |
| 缩写来源 | CSS 已被样式语言占用,故改称 XSS |
反射型(Reflected):恶意代码在 URL 参数中,服务器把参数原样返回页面,受害者点击构造链接即触发。攻击作用域仅限单次请求,需要配合社会工程学诱导点击。
存储型(Stored):脚本存入数据库,访问含该内容的页面的所有用户都会中招,危害范围远超反射型。论坛、评论区、用户简介是高发区。2005 年的 Samy 蠕虫正是存储型 XSS——Samy Kamkar 在 MySpace 个人页面植入脚本,每位访客自动添加 Samy 为好友并将蠕虫复制到自己页面,最终感染逾 100 万账户。
DOM 型(DOM-based):漏洞在前端 JavaScript 中,服务器响应本身正常,但浏览器在操作 DOM 时(如 innerHTML 赋值、document.write)把攻击载荷写入页面。现代单页应用(SPA)中此类问题尤其常见,因为大量数据处理发生在客户端。[1]
最基础的防御是输出编码:把 <、>、"、' 等特殊字符转义为 HTML 实体,确保浏览器把它们当文本而非标签处理。但编码必须发生在「正确的上下文」——HTML 属性、JavaScript 字符串、CSS 值对应的转义规则各不相同。
内容安全策略(CSP)是深度防御手段:通过 HTTP 头 Content-Security-Policy 声明允许加载脚本的来源,禁止内联脚本(unsafe-inline),即使注入成功也无法执行。Google 内部研究(2016 年)发现 94.72% 已部署的 CSP 策略存在可绕过漏洞,说明正确配置 CSP 并不容易。
现代框架(React、Vue、Angular)默认把所有变量视为文本渲染,除非开发者主动调用 dangerouslySetInnerHTML 或 v-html,大幅降低了误操作空间。

| 历史里程碑 | 2005 年 Samy 蠕虫,20 小时感染 100 万 MySpace 用户 |
| OWASP 2021 排名 | A03 注入子类 |
| 缩写来源 | CSS 已被样式语言占用,故改称 XSS |
登录 后参与讨论
暂无讨论,来发表第一条评论吧