跨站脚本(XSS)
跨站脚本(XSS) 是什么?
跨站脚本(XSS)一种 Web 漏洞,攻击者可在其他用户浏览的页面中注入恶意脚本,使其在受害者浏览器中以该站点的来源身份运行。
跨站脚本(XSS)发生在 Web 应用未经上下文感知的转义便将不受信任的输入回显或存储在其响应中,从而让攻击者控制的 JavaScript 在受害者浏览器中以该站点的来源身份运行——继承其 Cookie、DOM 访问权限和同源特权。它分为三类:反射型(载荷从请求中回显)、存储型(载荷被持久化在服务器端,例如存于评论中)和基于 DOM 型(漏洞接收点位于客户端 JavaScript 中,如 innerHTML 或 document.write)。
存储型 XSS 影响范围的经典演示是 Samy 蠕虫:2005 年 10 月 4 日,Samy Kamkar 在他的 MySpace 个人资料上植入了一段 JavaScript 载荷,它会将他添加为好友,并将自身复制到每个浏览者的个人资料上。该蠕虫在不到 20 小时内感染了超过一百万个账户——是当时传播最快的蠕虫——并引发了特勤局(Secret Service)的突击搜查和一项重罪认罪。XSS 至今仍是 OWASP Top 10 的常客,被并入 A03:2021(注入)。
防御是分层的:上下文感知的输出编码(HTML、属性、JS、URL)、配合 nonce 或哈希的严格 Content-Security-Policy 以阻止内联脚本、框架的自动转义(React、Angular)、用于锁定危险 DOM 接收点的 Trusted Types,以及用于限制会话窃取的 HttpOnly/SameSite Cookie。输入验证有所帮助,但单凭它并不足够。
flowchart LR A["攻击者提交载荷"] --> W["Web 应用存储或回显输入"] W -->|"未转义的输出"| V["受害者浏览器渲染页面"] V --> X["攻击者脚本以站点来源身份运行"] X --> S["窃取 Cookie/会话、键盘记录、横向渗透"]
● 示例
- 01
论坛帖子中的存储型 XSS 载荷,在每个浏览该帖的用户处窃取会话 Cookie。
- 02
搜索参数中的反射型 XSS 通过攻击者构造的链接执行其提供的 JavaScript。
● 常见问题
跨站脚本(XSS) 是什么?
一种 Web 漏洞,攻击者可在其他用户浏览的页面中注入恶意脚本,使其在受害者浏览器中以该站点的来源身份运行。 它属于网络安全的 攻击与威胁 分类。
跨站脚本(XSS) 是什么意思?
一种 Web 漏洞,攻击者可在其他用户浏览的页面中注入恶意脚本,使其在受害者浏览器中以该站点的来源身份运行。
如何防御 跨站脚本(XSS)?
针对 跨站脚本(XSS) 的防御通常结合技术控制与运营实践,详见上方完整定义。
跨站脚本(XSS) 还有哪些其他名称?
常见的别称包括: XSS。