Web文件上传安全:从基础校验到服务器解析漏洞的纵深防御
你辛辛苦苦开发了一个带文件上传功能的网站上线后一切正常。某天你突然发现服务器上多了一些奇怪的脚本文件网站首页被篡改甚至数据库被清空。你检查了代码明明做了文件类型校验为什么还会被攻破问题很可能出在文件上传功能上。这几乎是所有Web应用开发者的“必修课”也是安全攻防中最常见、最容易被忽视的入口。你以为的“安全”上传在攻击者眼中可能漏洞百出。从简单的绕过前端校验到利用服务器解析特性再到组合其他漏洞进行攻击文件上传的攻防是一场持续的技术博弈。本文将深入探讨Web文件上传安全中那些比基础校验更隐蔽、更危险的“进阶”攻击手法与防御策略。我们不会停留在“检查文件后缀”的层面而是会剖析攻击者如何利用服务器配置、解析逻辑、甚至代码本身来执行恶意代码。通过真实的攻击场景复现、代码示例和深度防御方案你将能构建一个真正健壮的文件上传模块。1. 文件上传漏洞的本质为什么“看起来安全”的代码会失效很多开发者认为文件上传安全就是“前端校验后端校验文件类型”。这种认知是危险的。文件上传漏洞的本质是攻击者能够将包含恶意代码的文件上传到服务器并诱使服务器以某种方式“执行”它从而获得系统控制权或窃取数据。攻击成功需要两个关键条件文件能够上传绕过或欺骗了服务器的校验机制。文件能够被执行服务器以可执行的方式处理了该文件例如将.jpg文件当作.php文件解析。防御的失败往往源于对以下几个层面的认知不足校验逻辑不严谨仅依赖客户端JavaScript校验或后端仅检查文件扩展名。服务器配置缺陷服务器如Apache、Nginx、IIS的解析规则存在安全隐患。业务逻辑疏忽未考虑攻击者可能利用的“正常”功能如重命名规则、目录遍历。组合漏洞利用文件上传点与其他漏洞如文件包含、解析漏洞结合产生更大破坏力。接下来的内容我们将逐一拆解这些高级攻击手法并给出对应的、可落地的防御代码。2. 绕过前端校验攻击的第一道门槛前端校验通常用JavaScript实现是为了提升用户体验绝不能作为安全依赖。攻击者可以轻易绕过。攻击手法禁用浏览器JavaScript。使用Burp Suite、Postman等工具直接构造HTTP请求绕过页面表单。修改本地HTML文件删除或篡改校验逻辑。防御策略所有校验必须在服务端进行。前端校验可保留但必须明确其仅用于友好提示。3. 绕过后端基础校验从“扩展名”到“内容”的博弈这是攻防的核心战场。我们从一个看似安全的PHP后端校验代码开始看看它如何被一步步攻破。3.1 案例脆弱的黑名单与白名单脆弱代码示例黑名单方式极易绕过// upload.php (危险示例) $allowed_ext array(jpg, png, gif); $file_name $_FILES[file][name]; $file_ext strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); if (!in_array($file_ext, $allowed_ext)) { die(文件类型不允许); } $upload_path uploads/ . $file_name; move_uploaded_file($_FILES[file][tmp_name], $upload_path); echo 文件上传成功 . $upload_path;攻击与绕过大小写绕过如果服务器如Windows不区分大小写上传shell.PHP或shell.Php可能成功。双重扩展名上传shell.jpg.php。如果代码只检查最后一个扩展名.php在黑名单外或使用错误的正则可能被绕过。特殊后缀.php5,.phtml,.phps等在某些服务器配置下同样会被当作PHP执行。空格/点号绕过shell.php.或shell.php末尾有空格在某些系统处理路径时会被修剪最终变成shell.php。防御升级使用白名单白名单只允许明确安全的类型远比黑名单禁止已知危险类型安全。// upload.php (改进白名单) $allowed_ext array(jpg, jpeg, png, gif); $file_name $_FILES[file][name]; // 更安全地获取扩展名处理多个点的情况 $file_ext strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); // 严格的白名单校验 if (!in_array($file_ext, $allowed_ext)) { die(文件类型不允许); } // 生成随机文件名防止覆盖和路径猜测 $new_file_name uniqid() . . . $file_ext; $upload_path uploads/ . $new_file_name; if (move_uploaded_file($_FILES[file][tmp_name], $upload_path)) { echo 文件上传成功。保存为 . $new_file_name; } else { echo 文件移动失败。; }3.2 致命陷阱仅检查MIME类型$_FILES[‘file’][‘type’]来自浏览器请求头可以被攻击者完全伪造。// 危险MIME类型可伪造 if ($_FILES[file][type] ! image/jpeg) { die(文件类型错误); }攻击者上传一个内容为PHP代码的文件只需在Burp Suite中将Content-Type修改为image/jpeg即可绕过。正确防御检查文件真实内容文件头// upload_secure.php (检查文件头) function checkFileHeader($tmp_name, $allowed_types) { $file_info finfo_open(FILEINFO_MIME_TYPE); $mime_type finfo_file($file_info, $tmp_name); finfo_close($file_info); return in_array($mime_type, $allowed_types); } $allowed_mime array(image/jpeg, image/png, image/gif); $tmp_file $_FILES[file][tmp_name]; if (!checkFileHeader($tmp_file, $allowed_mime)) { die(文件内容类型不合法); } // ... 后续白名单校验和保存操作这里使用finfo_file读取文件的魔术数字Magic Number这是判断文件类型的可靠方法。JPEG文件头总是FF D8 FF E0PNG文件头总是89 50 4E 47无法通过修改扩展名或MIME类型伪造。4. 服务器解析漏洞防线背后的“暗门”即使你的代码完美服务器配置也可能成为突破口。这是很多开发者容易忽略的层面。4.1 Apache 解析漏洞旧版本/错误配置漏洞原理Apache在解析文件时如果遇到不认识的后缀会从后向前尝试解析直到遇到认识的后缀。畸形解析文件名为shell.php.xxx。Apache不认识.xxx于是向前寻找发现.php于是将文件当作PHP执行。这在Apache的mod_mime模块未正确配置AddHandler时可能发生。目录解析特定版本形如xxx.php/的目录在某些配置下Apache会将其当作xxx.php文件解析。防御确保Apache配置中PHP处理器只关联明确的扩展名。# httpd.conf 或 .htaccess 中的安全配置示例 FilesMatch \.php$ SetHandler application/x-httpd-php /FilesMatch # 禁止访问 .ht* 文件 Files ~ “^\.ht” Require all denied /Files4.2 Nginx 解析漏洞错误配置漏洞原理主要源于错误的fastcgi配置导致Nginx将非PHP文件传递给PHP-FPM解析。错误配置示例location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; }这个配置看起来正常但问题在于正则表达式\.php$匹配以.php结尾的URI。如果攻击者上传一个图片shell.jpg然后访问/uploads/shell.jpg/xxx.phpNginx看到URI以.php结尾就会将整个路径/uploads/shell.jpg传递给PHP-FPM。PHP-FPM如果未做路径存在性校验就会去解析shell.jpg文件导致其中的PHP代码被执行。防御在Nginx配置中严格校验PHP文件的存在性。location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; # 关键安全配置检查SCRIPT_FILENAME对应的文件是否存在 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 更严格的校验确保请求的文件确实存在且是普通文件 if (!-f $document_root$fastcgi_script_name) { return 404; } } # 上传目录禁止执行脚本 location ^~ /uploads/ { location ~ \.php$ { deny all; return 403; } }4.3 IIS 解析漏洞IIS 6.0 目录解析/xx.asp/xx.jpg会被当作ASP文件执行。IIS 6.0 分号解析xx.asp;.jpg在IIS6.0中会被当作xx.asp执行。IIS 7.0/7.5 解析漏洞在Fast-CGI模式下类似于Nginx的错误配置访问xx.jpg/xx.php可能导致xx.jpg被解析。防御升级到新版本IIS并严格配置请求过滤和处理器映射。5. 高级攻击手法条件竞争与图片木马5.1 条件竞争攻击Race Condition攻击场景你的上传逻辑是“先保存再检查内容不合法则删除”。攻击者持续快速上传一个内容为PHP代码的shell.php文件。在文件被保存后、但尚未被安全检查脚本删除的极短时间内攻击者立即通过Web访问这个shell.php。如果时间窗口被抓到恶意代码就会执行。防御策略先校验后保存。所有检查都应在临时文件或内存中进行确保完全合法后再移动到最终目录。同时最终存储目录应配置为不可执行脚本。5.2 图片木马图片Webshell这是最具迷惑性的攻击之一。攻击者将一个真实的图片和PHP代码拼接在一起。// 一个图片Webshell示例shell.jpg.php GIF89a? // 合法的GIF文件头 ?php eval($_POST[cmd]); ?如果服务器仅检查文件头它会认为这是一个GIF图片。但如果服务器配置了“图片目录也能解析PHP”或者结合了文件包含漏洞LFI/RFI这个文件就会变成致命的Webshell。防御组合拳文件头校验如前所述必不可少。目录权限分离上传目录如/uploads/必须设置为纯静态资源目录确保其下的任何文件都不会被服务器当作脚本执行。location /uploads/ { # 禁止此目录下所有PHP文件的访问和执行 location ~ \.php$ { deny all; } # 只允许访问图片等静态文件 try_files $uri 404; }渲染或重采样对图片进行二次处理如用GD库或ImageMagick进行缩放、裁剪、重新保存可以彻底破坏嵌入在图片二进制数据中的恶意代码。6. 完整的安全上传代码示例PHP下面是一个集成了多种防御策略的相对安全的文件上传处理示例。?php // config.php - 安全配置 define(UPLOAD_DIR, /var/www/html/example.com/uploads/); define(ALLOWED_EXT, [jpg, jpeg, png, gif]); define(ALLOWED_MIME, [image/jpeg, image/png, image/gif]); define(MAX_FILE_SIZE, 5 * 1024 * 1024); // 5MB // upload_handler.php require_once(config.php); function sanitizeFilename($filename) { // 移除路径中的目录遍历字符 $filename basename($filename); // 移除非安全字符只保留字母、数字、点、下划线、减号 $filename preg_replace(/[^a-zA-Z0-9._-]/, , $filename); // 防止隐藏文件以点开头 $filename ltrim($filename, .); return $filename; } function generateRandomName($originalName) { $ext strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); // 使用更安全的随机字节生成文件名 $randomBytes bin2hex(random_bytes(16)); return $randomBytes . . . $ext; } if ($_SERVER[REQUEST_METHOD] ! POST) { http_response_code(405); die(Method Not Allowed); } if (!isset($_FILES[file])) { die(No file uploaded.); } $file $_FILES[file]; // 1. 检查上传错误 if ($file[error] ! UPLOAD_ERR_OK) { die(Upload failed with error code: . $file[error]); } // 2. 检查文件大小 if ($file[size] MAX_FILE_SIZE) { die(File too large.); } // 3. 安全处理原始文件名并获取扩展名 $originalName sanitizeFilename($file[name]); $fileExt strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); // 4. 白名单校验扩展名 if (!in_array($fileExt, ALLOWED_EXT)) { die(Invalid file extension.); } // 5. 检查文件真实类型Magic Number $finfo finfo_open(FILEINFO_MIME_TYPE); $detectedMime finfo_file($finfo, $file[tmp_name]); finfo_close($finfo); if (!in_array($detectedMime, ALLOWED_MIME)) { die(Invalid file content type.); } // 6. 可选但推荐对图片进行二次验证/处理 if (strpos($detectedMime, image/) 0) { $imageInfo getimagesize($file[tmp_name]); if ($imageInfo false) { die(Uploaded file is not a valid image.); } // 可选使用GD库重新渲染图片破坏潜在嵌入代码 // $srcImg imagecreatefromjpeg($file[tmp_name]); // ... 处理并保存为新文件 } // 7. 生成随机文件名防止覆盖和路径猜测 $newFileName generateRandomName($originalName); $destination UPLOAD_DIR . $newFileName; // 8. 移动文件前再次确认目标目录安全禁止执行 // 确保UPLOAD_DIR目录的权限为755所属用户是Web服务器用户如www-data // 9. 移动上传的文件 if (move_uploaded_file($file[tmp_name], $destination)) { // 成功返回一个不直接暴露路径的标识符或相对URL echo json_encode([ success true, message File uploaded successfully., filename $newFileName // 只返回随机文件名不返回完整路径 ]); } else { die(Failed to move uploaded file.); } ?7. 常见问题与排查思路问题现象可能原因排查方式解决方案上传失败报UPLOAD_ERR_INI_SIZE错误php.ini中upload_max_filesize或post_max_size设置过小。查看phpinfo()或错误日志。修改php.ini相关配置并重启Web服务器。文件类型校验通过但图片无法显示文件头检查通过但文件实际已损坏或图片渲染处理环节出错。检查文件二进制内容确认GD库/ImageMagick扩展是否安装。确保图像处理函数正确使用并添加更严格的图像有效性检查。上传目录下的.php文件被访问时直接下载而非执行服务器配置正确上传目录已禁止脚本执行。检查Nginx/Apache对该目录的配置。这是理想的安全状态无需修改。确保所有静态资源目录都有此配置。攻击者上传了test.php.jpg并被拦截白名单校验生效.jpg后缀不在允许的图片扩展名白名单内。检查后端获取的扩展名是否为jpg。防御成功。确保你的白名单逻辑是检查pathinfo获取的最后一个扩展名。使用finfo_file检查某些合法图片也被拒绝finfo检测出的MIME类型与预期不符如某些PNG检测为application/octet-stream。打印出$detectedMime的值。根据实际情况微调ALLOWED_MIME数组或结合扩展名和文件头进行综合判断。生产环境上传功能正常但压力测试时出现“文件不存在”错误可能是条件竞争漏洞或临时目录 (upload_tmp_dir) 权限/空间问题。检查服务器临时目录权限和磁盘空间。优化代码逻辑避免“先存后删”。确保临时目录有足够权限和空间。8. 最佳实践与工程建议最小权限原则运行Web服务器的进程如www-data,nginx对上传目录应只有写和读权限绝无执行权限。目录权限建议设置为755或更严格的750。隔离存储将上传文件存储在Web根目录之外。通过一个专门的脚本如download.php?idxxx来读取和输出文件这样可以完全控制访问逻辑并防止直接执行。使用云存储/对象存储对于大型应用强烈建议使用OSS、S3等云服务。它们通常内置了安全策略、CDN和访问控制将文件上传的安全风险转移给云服务商。文件重命名永远不要使用用户提供的文件名。使用随机生成的字符串如UUID作为存储文件名并将原始文件名和映射关系存入数据库。病毒扫描对于企业级应用在服务器端集成ClamAV等病毒扫描引擎对上传文件进行扫描。日志与监控记录所有上传操作包括时间、IP、文件名处理后的、文件大小、用户ID等。监控异常上传行为如频率过高、文件大小异常、扩展名异常等。定期安全审计检查服务器配置Nginx/Apache.conf.htaccess确保没有错误的解析规则。检查应用程序依赖库是否存在已知文件上传漏洞。WAFWeb应用防火墙部署WAF可以拦截许多已知的文件上传攻击模式作为应用层防御的补充。9. 总结构建纵深防御体系文件上传安全不是一个单一的功能点而是一个需要纵深防御的体系。回顾一下关键层次前端层体验优化非安全依赖。应用层核心使用白名单校验扩展名。使用finfo_file或类似方法校验文件真实内容。对图片进行二次处理。使用随机文件名。实现“先校验后保存”的原子操作。服务器层配置静态资源目录禁止脚本执行。正确配置PHP处理器避免解析漏洞。设置合理的文件大小和请求超时限制。架构层考虑文件存储与Web服务的隔离云存储。实施完善的日志记录和行为监控。没有绝对的安全但通过理解攻击原理并在每一层部署恰当的防御措施你可以将文件上传功能的风险降到最低。建议将本文中的安全代码示例作为基础模板根据你的具体技术栈Java Spring, Python Django/Flask, Node.js等进行迁移和强化。在下次开发文件上传功能时不妨先问问自己我的防御体系覆盖到第几层了

相关新闻

揭秘杭州网站建设价格内幕与避坑指南:如何找到网站建设杭州最便宜且靠谱的团队

揭秘杭州网站建设价格内幕与避坑指南:如何找到网站建设杭州最便宜且靠谱的团队

在这个数字化浪潮席卷全球的时代,几乎每个人都会听到这样一句话:“搞企业,先搞网站。”作为杭州这座互联网重镇的一家公司老板或者市场负责人,你肯定也面临着同样的困惑:我想做个网站,但是预算有限,我该怎么才能在保证质量的前提下,把成本降到最低?网上搜一搜,你会发…

2026/8/14 3:24:46 阅读更多 →
LangChain智能体开发:create_agent统一入口详解与实战

LangChain智能体开发:create_agent统一入口详解与实战

1. 项目概述:为什么我们需要一个统一的智能体入口?如果你最近在折腾LangChain,尤其是想把手头的几个工具链、几个大模型API和一堆记忆模块拼成一个能“自己动”的智能体,那你大概率会和我一样,在某个深夜对着满屏的Age…

2026/8/16 20:43:02 阅读更多 →
从Halcon到自主视觉算法库:基于论文论证的工业视觉算子构建实践

从Halcon到自主视觉算法库:基于论文论证的工业视觉算子构建实践

1. 先搞清楚“中国版Halcon”到底要解决什么问题看到“中国版Halcon”这个提法,很多做机器视觉的朋友第一反应可能是“又一个对标Halcon的库”。但如果你仔细看标题后半句——“天天调用别人的无法得到精髓,我们力争再次更新时候也许就可以完成部分企业的…

2026/8/16 18:08:15 阅读更多 →

最新新闻

Linux符号链接ln -s详解:从原理到实战的完整指南

Linux符号链接ln -s详解:从原理到实战的完整指南

1. 项目概述:链接文件,Linux系统管理的“快捷方式” 在Linux世界里,文件系统就像一座巨大的图书馆,而 ln -s 命令,就是我们为这本书创建“快捷方式”或“引用卡片”的核心工具。这个项目标题“链接文件配置”听起来很…

2026/8/16 20:58:39 阅读更多 →
面向意图编程:AI时代组织重构的资产转移与协作范式

面向意图编程:AI时代组织重构的资产转移与协作范式

1. 项目概述:当“意图”成为组织的新语言最近和几个做企业架构和产品研发的朋友聊天,大家不约而同地提到了一个共同的痛点:组织跑得越来越快,但内部协作的“摩擦力”却越来越大。产品经理的“需求”到技术团队那里变成了另一套“功…

2026/8/16 20:58:39 阅读更多 →
机器学习算法分类与数据处理实战:从理论到工程实践

机器学习算法分类与数据处理实战:从理论到工程实践

1. 从“炼丹”到“炼金”:为什么算法与数据是机器学习的双螺旋 最近和几个刚入行的朋友聊天,发现一个挺有意思的现象。很多人一提到机器学习,脑子里蹦出来的第一个画面,可能就是打开某个框架,比如Scikit-learn&#xf…

2026/8/16 20:58:39 阅读更多 →
一网打尽抖音四大热榜:用 DouYin 抓取热搜、热门视频、热门音乐与正能量榜

一网打尽抖音四大热榜:用 DouYin 抓取热搜、热门视频、热门音乐与正能量榜

一网打尽抖音四大热榜:用 DouYin 抓取热搜、热门视频、热门音乐与正能量榜 【免费下载链接】DouYin API of DouYin for Humans used to Crawl Popular Videos and Musics 项目地址: https://gitcode.com/gh_mirrors/douyin2/DouYin 想要快速掌握抖音热榜抓取…

2026/8/16 20:58:39 阅读更多 →
面向意图编程与AI Agent驱动下的组织资产转型与重构

面向意图编程与AI Agent驱动下的组织资产转型与重构

1. 从“做什么”到“要什么”:意图驱动的组织变革序幕 最近和几个不同行业的朋友聊天,发现一个挺有意思的共性现象:无论是做软件开发的、搞产品设计的,还是负责市场运营的,大家手头的工作似乎都变得越来越“碎”。一个…

2026/8/16 20:58:39 阅读更多 →
pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持?

pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持?

pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持? 【免费下载链接】pgrust Postgres rewritten in Rust, now faster than Postgres and Clickhouse 项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust pgrust 兼容性是许多数据库开…

2026/8/16 20:57:39 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →