跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

XSS 攻击原理、类型与实战防御指南

详细解析了 XSS(跨站脚本攻击)的原理、分类及防御策略。文章介绍了反射型、存储型和 DOM 型三种 XSS 攻击的特点与实例,列举了常见的触发点和绕过技巧,并通过真实案例说明了危害。核心防御建议包括输出编码、输入过滤、禁用不安全 DOM 操作、启用 CSP 及使用 HttpOnly Cookie,强调输入不可信、输出要编码的原则以构建完整的安全体系。

萤火微光发布于 2026/4/5更新于 2026/10/26112 浏览
XSS 攻击原理、类型与实战防御指南

XSS 攻击原理、类型与实战防御指南

在 Web 安全领域,XSS(Cross-Site Scripting,跨站脚本攻击)一直是排名第一的高危漏洞类型。无论是大型互联网公司,还是中小企业网站,都深受其害。XSS 攻击不仅能窃取用户 Cookie、伪造身份,还能篡改页面内容、传播恶意代码,甚至引发大规模用户数据泄露。

本文将从 XSS 的本质原理出发,深入讲解三大类型 XSS 的攻击方式、触发条件、绕过技巧,并给出企业可落地的防御方案,帮助前端开发者与安全工程师建立完整的 XSS 攻防体系。

一、XSS 攻击的本质:把恶意脚本注入到别人的页面里

XSS 攻击的核心原理是:

攻击者通过各种方式,将恶意 JavaScript 代码注入到目标网站的页面中,当用户访问该页面时,恶意代码在用户浏览器中执行,从而实现攻击目的。

一句话总结:

XSS = 注入 + 执行

常见攻击目的包括:

  • 窃取用户 Cookie(document.cookie)
  • 劫持用户会话
  • 伪造用户操作
  • 篡改网页内容
  • 传播蠕虫
  • 盗取用户密码、银行卡信息等

二、XSS 的三大类型:反射型、存储型、DOM 型

XSS 通常分为三大类型,每种类型的攻击方式、危害程度和防御难度都不同。

1. 反射型 XSS(Reflected XSS)—— 一次性攻击

反射型 XSS 是最常见、最容易发现的类型。

  • 特点:恶意代码通过 URL 传入、服务器将恶意代码'反射'回页面、仅在当前请求中执行,不存储在服务器、通常需要诱骗用户点击恶意链接。
  • 典型场景:搜索框、错误页面、参数展示页面。

攻击示例:

http://example.com/search?q=<script>alert(document.cookie)</script>

如果服务器未对 q 参数进行过滤,页面会执行脚本,弹出 Cookie。

  • 危害:盗取用户 Cookie、钓鱼攻击、会话劫持。

2. 存储型 XSS(Stored XSS)—— 最危险的 XSS

存储型 XSS 是危害最大的类型,也叫'持久型 XSS'。

  • 特点:恶意代码被存储到服务器数据库、所有访问该页面的用户都会受到攻击、不需要诱骗点击,危害面极大。
  • 典型场景:评论区、留言板、用户资料、文章内容。

攻击示例: 在评论框输入:

<script>alert(document.cookie)</script>

如果服务器未过滤,该评论会被存入数据库,所有访问该页面的用户都会执行脚本。

  • 危害:大规模用户 Cookie 被盗、网站被挂马、蠕虫传播、用户数据泄露。

3. DOM 型 XSS(DOM-based XSS)—— 前端自身的漏洞

DOM 型 XSS 是前端 JavaScript 代码造成的漏洞,与服务器无关。

  • 特点:恶意代码不经过服务器、通过修改页面 DOM 结构触发、服务器返回的页面本身是干净的、漏洞存在于前端 JS 代码中。

典型场景:基于 URL 参数动态渲染页面内容的单页应用。 攻击示例: 页面代码:

<script> var x = document.location.hash.substring(1); document.write("<div>" + x + "</div>"); </script>

攻击者构造:

http://example.com/#<script>alert(1)</script>

页面会执行脚本。

  • 危害:盗取用户信息、劫持前端逻辑、钓鱼攻击。

三、XSS 攻击的常见触发点

XSS 攻击通常发生在以下场景:

  1. 输入未过滤:如搜索框、评论框、URL 参数。
  2. 输出未编码:服务器将用户输入直接输出到 HTML 中,未进行转义。
  3. 前端 DOM 操作不安全:如使用 document.write()、innerHTML、eval()、setTimeout()、setInterval(),这些函数都可能执行恶意代码。
  4. 第三方组件漏洞:如富文本编辑器、评论插件、广告组件。

四、XSS 绕过技巧(重点)

攻击者为了绕过防御,会使用各种技巧:

  1. 标签变形
    <scr<script>ipt>alert(1)</scr<script>ipt>
    
  2. 事件触发
    <img src=x onerror=alert(1)>
    
  3. 编码绕过
    <img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)>
    
  4. 利用 SVG
    <svg onload=alert(1)>
    
  5. JavaScript 伪协议
    <a href="javascript:alert(1)">click</a>
    
  6. 绕过 CSP:利用 JSONP、利用未正确配置的白名单、利用 iframe 嵌套。

五、真实案例:XSS 造成的重大安全事件

  • 案例 1:微博 XSS 蠕虫事件:2011 年,一名用户发布了一条包含 XSS 代码的微博,导致访问该微博的用户自动转发该内容,形成大规模蠕虫攻击。
  • 案例 2:某大型电商平台存储型 XSS:攻击者在商品评论中插入恶意脚本,盗取用户 Cookie,导致大量用户账号被盗。
  • 案例 3:某银行网银 DOM XSS:攻击者通过构造特殊 URL,盗取用户会话,造成资金损失。

六、总结:XSS 是前端安全的核心,必须重点防御

XSS 攻击是 Web 安全中最常见、最危险、最容易被忽视的漏洞之一。无论是开发者还是安全工程师,都必须掌握 XSS 的原理、类型、利用方式和防御方法。

防御 XSS 的关键是:

  • 输出编码
  • 输入过滤
  • 避免不安全的 DOM 操作
  • 启用 CSP
  • 使用 HttpOnly Cookie
  • 采用安全的前端框架

只要做到'输入不可信、输出要编码',绝大多数 XSS 漏洞都可以避免。

目录

  1. XSS 攻击原理、类型与实战防御指南
  2. 一、XSS 攻击的本质:把恶意脚本注入到别人的页面里
  3. 二、XSS 的三大类型:反射型、存储型、DOM 型
  4. 1. 反射型 XSS(Reflected XSS)—— 一次性攻击
  5. 2. 存储型 XSS(Stored XSS)—— 最危险的 XSS
  6. 3. DOM 型 XSS(DOM-based XSS)—— 前端自身的漏洞
  7. 三、XSS 攻击的常见触发点
  8. 四、XSS 绕过技巧(重点)
  9. 五、真实案例:XSS 造成的重大安全事件
  10. 六、总结:XSS 是前端安全的核心,必须重点防御

更多推荐文章

查看全部
  • Docker 部署 PostgreSQL 数据库教程
  • 产品经理理解前端后端数据库——用产品语言解析技术架构
  • Flutter inappwebview_cookie_manager 鸿蒙适配与安全隔离
  • MIT 电机混合模式控制参数配置与调试实战
  • AM32 无人机电调源码架构与工作原理深度解析
  • EhViewer 安卓客户端安装与使用指南
  • 我们的数据到底有多安全?网络安全经济学分析
  • 基于 MCP Server 的 Figma 设计稿自动转前端代码实践
  • 二叉树算法实战:美国血统重建与深度宽度计算
  • AI 工程化落地:企业智能化转型的挑战、策略与展望
  • AM32 固件深度解析:无人机电调配置与性能优化
  • C 语言顺序表原理与核心算法实战
  • Qt 与 Web 混合编程:CEF 与 QCefView 深度解析
  • SQL Server 到 KingbaseES V9R4C12 的零改造迁移实战
  • C/C++ 自定义类型:结构体
  • 基于 DeepSeek 和 Cursor 构建智能代码审查工具实战
  • Docker 部署 AI 量化分析平台:环境配置与波浪理论实战
  • 用 Java 设计一个随机验证码生成器
  • C++ 红黑树设计与实现详解
  • Android 开发中 OOM 问题的常见原因与解决方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online