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

Pikachu靶场-unsafe upfileupload

不安全的文件上传漏洞防御与对抗方式对照表

防御方式

防御实现

攻击者对抗方式

对抗原理

文件类型白名单验证

仅允许指定扩展名(如 .jpg.png

if (!in_array($ext, ['jpg', 'png'])) { die(); }

伪造文件类型:

1. 修改文件头(如GIF89a)

2. 使用双扩展名(如 shell.php.jpg

3. 大小写混淆(如 SHELL.PHP

绕过扩展名检查,利用服务器解析漏洞执行恶意代码。

文件内容检测

检查文件内容的MIME类型或魔术字节:

$finfo = new finfo(FILEINFO_MIME);

$mime = $finfo->file($_FILES['file']['tmp_name']);

在合法文件中嵌入恶意代码:

1. 图片木马(如Exif注释注入PHP代码)

2. 利用文件解析漏洞(如CVE-2021-44228)

伪装成合法文件,利用解析器漏洞触发代码执行。

文件重命名

上传后重命名文件为随机哈希值:

$new_name = md5(uniqid()) . '.' . $ext;

1. 预测哈希算法生成文件名

2. 结合文件包含漏洞直接调用哈希名

3. 上传.htaccess覆盖解析规则

通过预测或间接利用其他漏洞获取文件路径,或强制服务器解析特定文件类型。

目录权限隔离

设置上传目录不可执行:

chmod(upload_dir, 0755);

禁用上传目录的PHP解析:

nginx: location ~* ^/uploads/.*\.php$ { deny all; }

1. 利用服务器配置错误(如未禁用PHP解析)

2. 上传.htaccess文件修改解析规则:

AddType application/x-httpd-php .jpg

绕过目录执行限制,强制服务器将非PHP文件解析为代码。

文件大小限制

限制上传文件大小:

php.ini: upload_max_filesize=2M

<input type="hidden" name="MAX_FILE_SIZE" value="2097152">

分片上传绕过:

1. 通过多部分上传拼接文件

2. 利用HTTP请求篡改绕过前端校验

突破大小限制上传WebShell或大文件。

文件名过滤

过滤危险字符:

$filename = str_replace(['../', '%00'], '', $_FILES['file']['name']);

编码绕过:

1. URL编码(如 %2e%2e%2f 代替 ../

2. Unicode编码(如 ..%u2216

3. 空字节截断(如 shell.php%00.jpg

绕过路径遍历过滤,实现任意目录上传。

病毒扫描

调用杀毒引擎扫描上传文件:

system("clamscan $uploaded_file");

1. 混淆恶意代码(如代码加密、多态变形)

2. 利用免杀技术(如反射型WebShell)

逃避静态特征检测,使恶意文件不被识别。

客户端校验

前端JS校验文件类型:

<input type="file" accept=".jpg,.png">

直接修改HTTP请求:

1. 使用Burp Suite篡改Content-Type和文件名

2. 删除前端校验代码

绕过客户端限制,上传任意类型文件。

日志与监控

记录所有上传行为:

log_upload($user_ip, $filename);

部署WAF检测异常请求

1. 慢速攻击(低频上传)

2. 伪装正常流量(如图片缩略图+隐藏代码)

避免触发告警规则,延长攻击潜伏时间。

 

防御与对抗关键点总结

 

安全代码示例(PHP)

// 1. 白名单验证
$allowed_ext = ['jpg', 'png'];
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if (!in_array($ext, $allowed_ext)) {
    die("非法文件类型");
}

// 2. 内容检测
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($_FILES['file']['tmp_name']);
if (!in_array($mime, ['image/jpeg', 'image/png'])) {
    die("文件内容非法");
}

// 3. 重命名并存储
$new_name = md5(uniqid()) . '.' . $ext;
$upload_path = '/var/www/uploads/' . $new_name;
if (!move_uploaded_file($_FILES['file']['tmp_name'], $upload_path)) {
    die("文件上传失败");
}

// 4. 设置权限
chmod($upload_path, 0644);  // 禁止执行

 

client check

1,所谓客户端检查就是前端的javascript代码在检查上传文件的后缀名

<script>

    // 检查上传文件扩展名

    function checkFileExt(filename) {

        let isAllowed = false;            // 记录是否符合要求

        const allowedExts = ["jpg", "png", "gif"];

        // 取出上传文件的扩展名(不含点)

        const dotIndex = filename.lastIndexOf(".");

        const ext = filename.substring(dotIndex + 1).toLowerCase();

        // 校验扩展名

        for (let i = 0; i < allowedExts.length; i++) {

            if (ext === allowedExts[i]) {

                isAllowed = true;

                break;                    // 找到匹配项后立即退出循环

            }

        }

        // 如果不符合要求,给出提示并刷新页面

        if (!isAllowed) {

            alert("上传的文件不符合要求,请重新选择!");

            location.reload(true);

        }

    }

</script>

上传shell.php,果然弹窗告警不能上传.php文件

2,绕过方式,临时删除这段代码发现不行,禁用javascript可以。那就再使用burpsuite改后缀名试试

3,上传文件成功,使用蚁剑连接即可

 

server check(MIME type)

1,改包修改Content-Typeimage/png,然后shell.png改成shell.php

2,上传文件成功,使用蚁剑连接即可

 

getimagesize()

文件上传功能防御措施分析

一、已实现的防御措施

二、潜在安全风险

防御措施

风险描述

攻击示例

扩展名白名单

未过滤双扩展名(如 shell.php.jpg),可能被特定服务器解析为PHP文件。

上传 evil.php.jpg,利用Apache配置漏洞解析为PHP代码。

MIME类型校验

依赖客户端提交的 Content-Type,可被Burp Suite等工具篡改。

修改请求头为 Content-Type: image/png 上传PHP文件。

getimagesize()验证

无法检测图片中嵌入的恶意代码(如Exif注释注入)。

在图片元数据中插入 <?php system($_GET['cmd']); ?>

路径泄露

上传成功后返回文件存储路径:

<p>文件保存的路径为:{$upload['save_path']}</p>

攻击者直接访问路径执行恶意文件:

http://example.com/uploads/2023/10/05/evil.jpg。

三、攻击验证方法

  • 修改上传请求的 Content-Type 为 image/png,上传PHP文件。
  • MIME类型伪造
  • 使用ExifTool插入PHP代码到图片注释:
    exiftool -Comment='<?php system($_GET["cmd"]); ?>' normal.jpg
  • 图片马注入
  • 上传 shell.php.jpg,利用服务器解析漏洞(如配置 AddType application/x-httpd-php .jpg)。
  • 双扩展名绕过
  • 按日期分目录存储,降低目录遍历风险。
  • 目录隔离与路径隐藏
    $save_path = 'uploads'.date('/Y/m/d/');  // 按日期生成存储路径
  • 防止上传大体积WebShell或恶意文件。
  • 文件大小限制
    upload('uploadfile','512000',...);  // 限制文件大小为500KB
  • 使用 getimagesize() 检测文件是否为真实图片,防止伪装图片的恶意文件(如包含PHP代码的图片马)。
  • 图片内容验证
    // uploadfunction.php 中可能调用 getimagesize() 验证图片有效性
  • 通过 $_FILES['uploadfile']['type'] 验证文件类型。
  • MIME类型校验
    $mime = array('image/jpg','image/jpeg','image/png'); 
    // 检查上传文件的MIME类型
  • 仅允许上传 .jpg.jpeg.png 文件。
  • 扩展名白名单验证
    $type = array('jpg','jpeg','png');  // 限制文件扩展名
  • 防御方需关注新型攻击手法(如Polyglot文件、反序列化漏洞利用)
  • 攻击方会持续探索逻辑漏洞(如条件竞争上传)
  • 对抗升级
  • 禁用危险函数(如 putenv()proc_open()
  • 定期更新中间件(修复解析漏洞如Apache Tomcat CVE-2020-1938)
  • 纵深防御:需组合使用白名单、内容检测、重命名、权限控制等多层防护,单一措施易被绕过。
  • 输入不可信原则:所有用户输入(包括文件名、文件内容、HTTP头)均需严格过滤。
  • 服务器加固

相关文章:

Pikachu靶场-unsafe upfileupload

不安全的文件上传漏洞防御与对抗方式对照表 防御方式 防御实现 攻击者对抗方式 对抗原理 文件类型白名单验证 仅允许指定扩展名&#xff08;如 .jpg, .png&#xff09; if (!in_array($ext, [jpg, png])) { die(); } 伪造文件类型&#xff1a; 1. 修改文件头&#xff08;…...

Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型

目录 查看数据类型type() 使用type()语句查看数据的类型 变量无类型而数据有类型 数据类型转换 在字符串&#xff0c;整型&#xff0c;浮点数之间相互转换 可变类型和不可变类型 查看数据类型type() 使用type()语句查看数据的类型 Python中使用type(被查看数据的类型)语…...

高防IP是如何防护DDoS攻击和CC攻击的

高防IP是一种针对网络攻击&#xff08;如DDoS和CC攻击&#xff09;设计的防护服务&#xff0c;其核心原理是通过流量调度、智能清洗和分布式防护节点等技术&#xff0c;将恶意流量拦截在目标服务器之外。以下是其防护DDoS和CC攻击的具体机制&#xff1a; 一、防御DDoS攻击的机制…...

从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关

在构建本地或云端搜索引擎系统时&#xff0c;EasySearch 凭借其轻量、高性能、易部署等优势&#xff0c;逐渐成为众多开发者和技术爱好者的首选。但在实际部署过程中&#xff0c;如何借助 Nginx 为 EasySearch 提供高效、稳定且安全的访问入口&#xff0c;尤其是在身份认证方面…...

利用deepseek快速生成甘特图

一、什么是甘特图 甘特图&#xff08;Gantt Chart&#xff09;是一种直观的项目管理工具&#xff0c;广泛应用于多个领域&#xff0c;主要用于​​时间规划、任务分配和进度跟踪​​。 直观性​​&#xff1a;时间轴清晰展示任务重叠或延迟。 ​​灵活性​​&#xff1a;支持…...

突破厚铜PCB阻抗控制难题:多级阻抗实现方法

随着电子技术的发展&#xff0c;电子设备对电路板的性能要求越来越高。其中&#xff0c;阻抗控制是电路板设计中的一个重要环节&#xff0c;尤其是对于高频、高速的电子设备。厚铜电路板由于其优良的导电性能和机械强度&#xff0c;被广泛应用于各种高端电子设备中。然而&#…...

JCP官方定义的Java技术体系组成部分详解

JCP官方定义的Java技术体系组成部分详解 1. Java平台规范&#xff08;Java Platform Specifications&#xff09; 定义&#xff1a;由JCP制定的Java平台核心规范&#xff0c;包括Java SE&#xff08;标准版&#xff09;、Java EE&#xff08;企业版&#xff0c;现为Jakarta EE…...

如何在 Windows上安装 Python 3.6.5?

Windows 系统安装步骤 下载安装包 安装包下载链接&#xff1a;https://pan.quark.cn/s/9294ca0fd46a 运行安装程序 双击下载的 .exe 文件&#xff08;如 python-3.6.5.exe&#xff09;。 勾选 Add Python 3.6 to PATH&#xff08;重要&#xff01;这将自动配置环境变量&…...

OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)

hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。简单来讲&#xff0c;hdc 是 Op…...

【C语言】C语言动态内存管理

前言 在C语言编程中&#xff0c;内存管理一直是程序员需要重点关注的领域。动态内存管理更是如此&#xff0c;它不仅涉及到内存的灵活分配和释放&#xff0c;还隐藏着许多潜在的陷阱。本文将从动态内存分配的基础讲起&#xff0c;逐步深入到常见的错误、经典笔试题分析&#x…...

Java 运算符:深度解析

前言 作为Java开发者&#xff0c;运算符是我们每天都会接触的基础元素。然而&#xff0c;很多开发者对运算符的理解仅停留在表面层次。本文将全面深入地剖析Java中的各类运算符&#xff0c;揭示其底层原理、使用技巧和最佳实践&#xff0c;帮助您成为真正的Java运算符专家。 …...

健康养生小窍门

健康养生是我们对美好生活的追求&#xff0c;掌握一些实用的小窍门&#xff0c;能让我们轻松拥抱健康。 在生活起居方面&#xff0c;要注重环境的营造。卧室的窗帘选择遮光性好的材质&#xff0c;保证睡眠时的黑暗环境&#xff0c;有助于提高睡眠质量。在室内放置一些绿植&…...

4月24号

网络编程: //IP的对象一台电脑的对象 InetAddress address InetAddress.getByName("DESKTOP-5OJJSAM"); System.out.println(address); String name address.getHostName(); System.out.println(name);//DESKTOP-5OJJSAM String ip address.getHostAddress(); Sys…...

【RocketMq源码篇-01】环境搭建、基本使用、可视化界面

RocketMq源码核心篇整体栏目 内容链接地址【一】环境搭建、基本使用、可视化界面https://zhenghuisheng.blog.csdn.net/article/details/147481401 环境搭建、基本使用、可视化界面 一&#xff0c;RocketMq源码分析1. docker安装rocketMq2. rocketMq基本使用2.1&#xff0c;创建…...

Mysql的深度分页查询优化

一、深度分页为什么慢&#xff1f; 当执行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 时&#xff1a; MySQL 会扫描前 1,000,010 行&#xff0c;丢弃前 100 万行&#xff0c;仅返回 10 行。偏移量&#xff08;offset&#xff09;越大&#xff0c;扫描行数越多&…...

OpenCv高阶(十一)——物体跟踪

文章目录 前言一、OpenCV 中的物体跟踪算法1、均值漂移&#xff08;Mean Shift&#xff09;&#xff1a;2、CamShift&#xff1a;3、KCF&#xff08;Kernelized Correlation Filters&#xff09;&#xff1a;4、MIL&#xff08;Multiple Instance Learning&#xff09;&#xf…...

第一章:Model Context Protocol (MCP)

Chapter 1: Model Context Protocol (MCP) &#x1f31f; 为什么需要MCP&#xff1f; 想象你正在训练一只小狗&#xff0c;希望它能听懂你的指令并执行任务。但如果你和小狗用不同语言交流&#xff0c;它可能完全不知道你的意思。类似地&#xff0c;大型语言模型&#xff08;L…...

【SAP PP】COOIS报表分析

本文目录 一、基本查询操作 二、订单参数文件 三、COOIS报表增强BADI COOIS报表是PP模块核心报表&#xff0c;是系统中一个功能强大的标准报表&#xff0c;COOIS可查询查询生产订单的状态、进度、组件、工序、报工等信息的综合型报表&#xff0c;&#xff0c;关联了生产订单…...

2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888

4月24日&#xff0c;在第二十一届上海国际汽车工业展览会&#xff08;以下简称“上海车展”&#xff09;期间&#xff0c;紫光展锐重磅推出新一代旗舰级智能座舱芯片平台A8880&#xff0c;以强劲实力全面助力汽车座舱智能化迈向新征程。 三大核心能力&#xff0c;紧抓市场机遇 …...

蓝牙4.0与蓝牙5.0的区别

蓝牙4.0与蓝牙5.0的主要区别&#xff1a; 传输速度&#xff1a;蓝牙5.0的传输速度是蓝牙4.0的两倍&#xff0c;理论速率可达2Mbps&#xff0c;而蓝牙4.0为1Mbps。 传输距离&#xff1a;蓝牙5.0的传输距离是蓝牙4.0的四倍&#xff0c;在开放空间可达300米&#xff0c;而蓝牙4.0…...

Vue 的单文件组件(.vue 文件)script 标签的使用说明

在 Vue 的单文件组件&#xff08;.vue 文件&#xff09;中&#xff0c;最多可以编写 2 个 <script> 标签&#xff0c;但需要满足特定条件&#xff1a; 1. Vue 3 的情况&#xff08;主流用法&#xff09; 从 Vue 3.2 开始&#xff0c;官方支持以下两种形式共存&#xff1…...

TIM输入捕获知识部分

越往左&#xff0c;频率越高&#xff1b;越往右&#xff0c;频率越低。【越紧凑&#xff0c;相同时间&#xff0c;次数越多】 计算频率的方法&#xff1a;测评法、测周法、中界频率。 频率的定义&#xff1a;1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…...

【数据可视化-30】Netflix电影和电视节目数据集可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

多线程事务?拿捏!

场景:有一批1万或者10万数据&#xff0c;插入数据库&#xff0c;怎么做 事务中进行批量提交 publList<List<OrderPo>> partition Lists.partition(list, 450);StopWatch stopWatch new StopWatch();stopWatch.start();// 顺序插入for (List<OrderPo> sub…...

Spring Boot 自动配置深度解析:从源码结构到设计哲学

Spring Boot 自动配置深度解析&#xff1a;从源码结构到设计哲学 为什么自动配置如此重要&#xff1f; 在传统 Spring 开发中&#xff0c;开发者要手动配置大量 XML 或 JavaConfig&#xff0c;过程繁琐、重复且容易出错。Spring Boot 引入自动配置机制&#xff0c;极大地简化…...

Linux下载与安装——笔记

Linux 是一种自由和开放源代码的 操作系统&#xff08;OS&#xff09;&#xff0c;其核心&#xff08;Kernel&#xff09;由 Linus Torvalds 于 1991 年首次发布。 1、选择适合的 Linux 发行版 根据使用场景和技术水平选择&#xff1a; 新手入门&#xff1a;Ubuntu&#xff08…...

09前端项目----分页功能

分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多&#xff0c;所以采用分页功能实现分页功能 Element UI已经有封装好的组件&#xff0c;但是也要掌握原理&#xff0c;以及自定…...

头歌之动手学人工智能-机器学习 --- PCA

目录 第1关&#xff1a;维数灾难与降维 第2关&#xff1a;PCA算法流程 任务描述 编程要求 测试说明 第3关&#xff1a;sklearn中的PCA 任务描述 编程要求 测试说明 第1关&#xff1a;维数灾难与降维 第2关&#xff1a;PCA算法流程 任务描述 本关任务&#xff1a;补充…...

Spring 中的循环引用问题

本章来聊聊Spring 中的循环引用问题该如何解决。这里聊的很粗糙&#xff0c;并没有那么细节&#xff0c;只是大概了解了一点。 什么是循环引用&#xff1f; 如下图所示&#xff1a; 图中有两个类&#xff0c;一个 Class A &#xff0c;A 中又引用了 B&#xff0c;Class B 中又…...

SIGGRAPH投稿相关官方指导

author instruction https://www.siggraph.org/preparing-your-content/author-instructions/ 使用latex模板 https://research.siggraph.org/blog/guides/how-to-use-the-acm-siggraph-tog-latex-template/ 格式要求&#xff08;字体、页面大小等&#xff09; https://sa202…...

Python学习笔记(三)(程序流程控制)

文章目录 一、条件语句&#xff08;if/elif/else&#xff09;语法&#xff1a;示例&#xff1a; 二、循环语句1. for 循环语法&#xff1a;示例&#xff1a; 2. while 循环语法&#xff1a;示例&#xff1a; 三、循环控制语句1. break&#xff1a;立即终止循环2. continue&…...

onnx注册cpu版flashattention

摘要 本教程展示了如何在 ONNX Runtime 中注册一个 CPU 可执行的 FlashAttention 算子。首先,可以直接升级到 ONNX Runtime v1.16 及以上,以获得内置的 FlashAttention CPU 实现citeturn0search2;其次,演示了如何通过 ONNX Runtime 的 Custom Op 接口自定义实现并注…...

WebAssembly:开启高性能Web应用新时代

一、引言 随着互联网技术的飞速发展&#xff0c;Web应用的复杂度和性能要求越来越高。传统的Web开发技术&#xff0c;如JavaScript&#xff0c;虽然功能强大&#xff0c;但在处理复杂计算和高性能需求时仍存在一些局限性。WebAssembly&#xff08;简称Wasm&#xff09;作为一种…...

【前端】手写代码输出题易错点汇总

不定期补充。 目录 异步事件循环this作用域/变量提升/闭包原型/继承 异步事件循环 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); //1 //2 //4promise.then 是微任务&…...

STM32F103_HAL库+寄存器学习笔记20 - CAN发送中断+ringbuffer + CAN空闲接收中断+接收所有CAN报文+ringbuffer

导言 如上所示&#xff0c;在[[STM32F103_HAL库寄存器学习笔记19 - CAN发送中断CAN接收中断接收所有CAN报文ringbuffer数据结构]]的基础上&#xff0c;为CAN发送端也引入了ringbuffer&#xff08;环形缓冲区&#xff09;机制。CAN发送有三个发送邮箱&#xff0c;为什么还另外需…...

小白自学python第二天

学习python的第二天 一、判断语句 1、布尔类型和比较运算符 1、布尔类型 表示现实生活中的逻辑&#xff0c;真&#xff08;True&#xff0c;用数字1表示&#xff09;和假&#xff08;False&#xff0c;用数字0表示&#xff09; 2、布尔类型变量的定义 变量的名称 布尔类…...

JavaScript 异步编程与请求取消全指南

JavaScript 异步编程与请求取消全指南 涵盖&#xff1a;同步/异步、Promise、async/await、AbortController、前后端协作 一、同步与异步 1. 同步&#xff08;Synchronous&#xff09; 定义&#xff1a;代码按顺序执行&#xff0c;前一步完成才能执行下一步。特点&#xff1…...

Redis 核心应用场景

高性能缓存 Redis 作为内存数据库&#xff0c;读写性能可达10万 QPS&#xff0c;适合缓存热点数据&#xff08;如商品详情、用户会话&#xff09;&#xff0c;显著降低数据库压力。通过设置过期时间&#xff08;TTL&#xff09;自动清理非热点数据&#xff0c;推荐结合allkeys-…...

KMS工作原理及其安全性分析

在当今数字化时代&#xff0c;数据安全已经成为企业和个人最为关注的话题之一。随着云计算和大数据的快速发展&#xff0c;如何安全地管理密钥成为了一个重要的挑战。KMS&#xff08;Key Management Service&#xff0c;密钥管理服务&#xff09;作为一种专业的密钥管理解决方案…...

施磊老师基于muduo网络库的集群聊天服务器(六)

文章目录 客户端开发开始客户端首页面功能为何不逐行开发&#xff1f;客户端CMake代码搭配知识补充--有很多漏的客户端main-登录,注册,退出群组有问题测试 客户端好友添加与聊天功能表驱动设计&#xff1a;commandMapcommandHandlerMap为什么都是int, string添加好友和聊天功能…...

有关字体,语言,字符编码相关的基础知识,询问chatgpt所得

学习这个知识点的背景是&#xff0c;我需要做一个 在canvas 上书写矢量文本的功能&#xff0c; 使用opentype来加载字体文件&#xff0c;并将内容转换为 svg&#xff0c;导入画布。 但是有些字体文件 是不包含 一些其他语言的字符的。就可能出现 “无效字符”。 花了点时间研究…...

Obsidian和Ollama大语言模型的交互过程

之前的文章中介绍了Obsidian配合Ollama的使用案例&#xff0c;那么它们是如何配合起来的呢&#xff1f;其实这个问题并不准确&#xff0c;问题的准确描述应该是Obsidian的Copilot插件是如何与Ollama大语言模型交互的。因为Obsidian在这里只是一个载体&#xff0c;核心功能还是C…...

架构-数据库系统

数据库系统 一、数据库系统概述 &#xff08;一&#xff09;课程核心模块 覆盖数据库设计、关系代数、规范化理论、数据控制四大核心模块&#xff0c;旨在构建从理论到实践的完整知识体系至。 &#xff08;二&#xff09;典型应用场景 数据管理&#xff1a;学生信息管理&a…...

【C到Java的深度跃迁:从指针到对象,从过程到生态】第三模块·面向对象深度进化 —— 第十二章 接口:比C函数指针更强大的契约

一、从函数指针到接口契约 1.1 C函数指针的本质限制 C语言通过函数指针实现回调机制&#xff0c;但存在根本性缺陷&#xff1a; 回调函数示例&#xff1a; typedef void (*Logger)(const char*); void process_data(int data, Logger logger) { // ... logger("Pro…...

【HFP】蓝牙语音通话控制深度解析:来电拒接与通话终止协议

目录 一、来电拒接的核心流程与信令交互 1.1 拒接场景的分类与触发条件 1.2 HF 端拒接流程 1.3 AG 端拒接流程 二、通话终止流程&#xff1a;主动断开与异常中断 2.1 终止场景的界定 2.2 HF 端终止流程 2.3 AG 端终止流程 三、信令协议的核心要素&#xff1a;AT 命令与…...

linux 中断子系统 层级中断编程

虚拟中断控制器代码&#xff1a; #include<linux/kernel.h> #include<linux/module.h> #include<linux/clk.h> #include<linux/err.h> #include<linux/init.h> #include<linux/interrupt.h> #include<linux/io.h> #include<linu…...

continue插件实现IDEA接入本地离线部署的deepseek等大模型

文章目录 前言一、IDEA安装continue二、continue部署本地大模型三、continue聊天窗口使用deepseek R1四、continue批量接入硅基流动的模型API 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff0c;您的关注是我…...

Redis-缓存应用 本地缓存与分布式缓存的深度解析

Redis缓存场景与策略&#xff1a;本地缓存与分布式缓存的深度解析 在当今高并发、低延迟的互联网架构中&#xff0c;缓存技术是优化系统性能的核心手段之一。Redis作为分布式缓存的标杆&#xff0c;与本地缓存共同构成了缓存体系的两大支柱。然而&#xff0c;两者的适用场景与…...

关于按键映射软件的探索(其一)

那么先说结论——重构了一次&#xff0c;我还是失败了&#xff0c;失败于拓展调整个性化的设计&#xff0c;不过我还是实现了按键监测然后显示的功能。只不过是说我对于WPF软件等的封装和软窗口的功能还是不怎么熟悉。 引言 在许多游戏玩家中&#xff0c;高难度操作&#xff08…...

测试基础笔记第十一天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、查询连接1.内连接2.左连接3.右连接4.左右连接的必要性5.自关联6.普通查询7.子查询8.子查询充当数据源 二、数据库高级扩展内容1.外键2.索引3.验证索引效果案例实…...