XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的前端攻击方式,攻击者通过注入恶意脚本代码,让受害者浏览器执行这些代码,进而达到窃取 Cookie、劫持会话、伪造操作等目的。
XSS 攻击的核心:
利用网站对用户输入内容未做适当过滤或转义,注入恶意脚本,并在其他用户浏览页面时被执行。
这些脚本通常是 JavaScript,但也可以是 HTML、Flash 等。
类型 | 简述 | 示例说明 |
---|---|---|
反射型 XSS | 恶意代码存在于 URL 中,用户点击链接就执行。常用于钓鱼。 | 用户访问恶意链接:https://a.com?msg=<script>alert(1)</script> |
存储型 XSS | 恶意脚本被“存储”在数据库中,其他用户访问页面时被执行。 | 在论坛发帖或评论中注入脚本,其他人浏览时触发。 |
DOM 型 XSS | 利用前端 JS 处理用户输入时没有做校验,直接插入 DOM。 | JS 中读取 location.hash 并插入页面时未转义。 |
防御手段 | 说明 |
---|---|
✅ 输出编码 | 所有用户输入展示在 HTML 中前都应转义(如 & →
& ,< → < ) |
✅ 输入校验 | 限制输入长度、字符集、禁止脚本标签等敏感内容 |
✅ 使用 CSP | 内容安全策略,禁止 inline script 执行,限制加载源 |
✅ Cookie 设置 HttpOnly | 防止 JS 读取 Cookie |
✅ 框架自动防御机制 | 如 Vue、React、Angular 会自动转义变量插入 |
✅ 过滤 HTML 标签 | 使用白名单过滤器,如 DOMPurify、xss-clean |
<input type="text" value="<script>alert('XSS')</script>">
如果没有过滤,上面代码会让页面弹出一个窗口。
常用测试脚本:
<script>alert(1)</script>
<img src=1 onerror=alert(1)>
<svg onload=alert(1)>
使用工具:
XSS 是攻击者将恶意脚本注入网页中,让用户在不知情的情况下执行,从而造成信息泄露、账户劫持等问题。防御的关键是“永远不要相信用户输入”,所有输出都要做转义和校验。