首页
直播
壁纸
友链
搜索
1
微信小程序 Skyline 渲染引擎实战:worklet 动画从原理到落地
327 阅读
2
微信小程序支付全链路实战:JSAPI 下单、调起支付、回调验签与退款
308 阅读
3
微信小程序云开发实战:云函数、云数据库与云存储的正确使用姿势
280 阅读
4
小程序接口安全攻防:签名、防重放、防刷与数据加密实战
276 阅读
5
微信小程序分包进阶:独立分包、预下载与分包异步化实战
271 阅读
服务器运维
后端技术
前端技术
梯子
数据库
小程序
登录
搜索
标签搜索
fastadmin
Redis
微信小程序
前端开发
RabbitMQ
Go
Golang
服务器
codex
buildadmin
小程序
mysql
Nginx
Docker
Vue3
Node.js
MySQL优化
Linux
TypeScript
JWT
沿途的风景
累计撰写
82
篇文章
累计收到
0
条评论
首页
栏目
服务器运维
后端技术
前端技术
梯子
数据库
小程序
页面
直播
壁纸
友链
搜索到
11
篇与
» 服务器运维
的结果
2026-10-29
git add 提示 --ignore-removal 警告怎么解决
warning: You ran 'git add' with neither '-A (--all)' or '--ignore-removal',whose behaviour will change in Git 2.0 with respect to paths you removed.Paths like 'usr/plugins/AdminBeautify/assets/AdminBeautify.min.v2.1.43.js' that areremoved from your working tree are ignored with this version of Git.'git add --ignore-removal ', which is the current default,ignores paths you removed from your working tree.'git add --all ' will let you also record the removals.Run 'git status' to check the paths you removed from your working tree.这是个警告,不是错误,命令已经执行了。但你可能没达到预期效果,解释一下:原因:你这台 CentOS 上的 git 版本还是 1.x。旧版 git add . 的默认行为是忽略已删除的文件——也就是说,你工作区里被删掉的文件(比如那个 AdminBeautify.min.v2.1.43.js)不会被记录为“删除”,暂存区里还留着它。Git 2.0 开始 git add . 才默认等同于 git add -A,这条警告就是在提前提醒你。解决方法:改用:bashgit add -A这样新增、修改、删除三种变化都会被暂存。然后 git status 确认一下,删除的文件应该显示为 deleted: 状态。顺便提醒:服务器上出现“工作区文件被删除”的情况,结合你本地刚做的 git rm --cached 操作,我猜你的流程可能是:本地提交删除 → 服务器拉取。如果服务器上那些“被删除的文件”其实是你想保留的本地文件,用 git add -A 提交删除就真的没了,操作前先用 git status 看清楚哪些文件是删除状态,确认无误再提交。
2026年10月29日
10 阅读
0 评论
0 点赞
2026-10-28
Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言
从性能到生态,全面解读五大主流编程语言在当今软件工程领域,选择一门合适的编程语言往往决定了项目的成败。Go、Rust、Kotlin、Python 和 Java 是当前最广泛使用的五种编程语言,它们各自代表了不同的设计哲学和应用场景。本文将从 语言定位、性能、并发模型、错误处理、类型系统、内存管理、生态系统、学习曲线、适用场景与发展前景 等多个维度进行系统性对比,并辅以实际代码示例,帮助开发者做出更明智的技术选型决策。一、语言定位与设计哲学:为何而生?每门语言都有其诞生的历史背景和核心使命。语言设计目标核心理念Go (Golang)解决 Google 内部大规模分布式系统的复杂性问题简单即高效:舍弃继承、泛型(早期)、异常等“高级”特性,追求清晰、快速编译与部署。Rust替代 C/C++ 编写安全可靠的系统软件零成本抽象 + 内存安全 = 高性能无风险:通过所有权机制杜绝空指针、数据竞争。Kotlin改进 Java 的冗长语法与常见陷阱(如 NPE)现代 JVM 开发者的理想语言:简洁、安全、互操作性强,是 Android 官方推荐语言。Python让编程更接近自然语言,提升开发效率人生苦短,我用 Python(Life is short, I use Python):强调可读性和快速原型开发。Java“一次编写,到处运行”(Write Once, Run Anywhere)企业级稳定性优先:JVM 提供跨平台能力,庞大的类库支持大型应用构建。关键洞察:Go 追求的是“团队协作下的可维护性”,适合多人协作的大项目。Rust 追求的是“绝对的安全与极致性能”,适用于底层基础设施。Kotlin 是 Java 的“现代化升级包”,而非替代品。Python 是“胶水语言之王”,擅长整合各种工具链。Java 仍是企业级应用的“定海神针”。二、性能对比:谁更快?谁更省资源?性能是衡量语言能力的重要指标,尤其在高并发或计算密集型场景中至关重要。性能维度拆解维度描述启动时间是否需要 JIT 预热?是否依赖虚拟机?执行速度CPU 密集任务的吞吐量与延迟内存占用应用常驻内存大小二进制体积编译后文件大小,影响部署效率性能对比表(基于典型 Web API 场景)语言类型系统编译方式运行时环境启动时间内存占用(空载)执行性能(相对值)典型用途Go静态编译为本地机器码无(或极小运行时)<100ms\~5-20 MB⭐⭐⭐⭐☆ (90)微服务、CLI 工具Rust静态编译为本地机器码无<100ms\~2-10 MB⭐⭐⭐⭐⭐ (100)系统程序、WASMKotlin静态编译为 JVM 字节码JVM500ms\~2s\~100-300 MB⭐⭐⭐☆☆ (70)Android、Spring BootJava静态编译为 JVM 字节码JVM500ms\~3s\~100-500 MB⭐⭐⭐☆☆ (65)企业级后端、大数据Python动态解释执行(CPython)Python 解释器<100ms\~20-50 MB⭐☆☆☆☆ (20)脚本、AI 原型💡 注:数值为参考基准,具体取决于实现和负载类型。性能实测案例(斐波那契数列第45项)代码语言:Go// Go: 编译为原生代码,速度快 func fib(n int) int { if n <= 1 { return n } return fib(n-1) + fib(n-2) }代码语言:Rust// Rust: 同样编译为原生代码,且可做更多优化 fn fib(n: u32) -> u32 { match n { 0 | 1 => n, _ => fib(n - 1) + fib(n - 2), } }代码语言:Kotlin// Kotlin: 在 JVM 上运行,需 JIT 优化才能达到最佳性能 fun fib(n: Int): Int = when (n) { 0, 1 -> n else -> fib(n - 1) + fib(n - 2) }代码语言:Python# Python: 解释执行,递归调用开销大,极易栈溢出 def fib(n): return n if n <= 1 else fib(n-1) + fib(n-2)代码语言:Java// Java: 类似 Kotlin,但语法更冗长 public static int fib(int n) { return (n <= 1) ? n : fib(n - 1) + fib(n - 2); }结果(平均耗时):Rust / Go:约 1.2 秒Java / Kotlin:约 2.8 秒(首次运行较慢,JIT 优化后趋近 Go)Python:约 28 秒注意:此测试使用递归算法,放大了解释型语言的劣势。若改用迭代法,差距会缩小,但趋势不变。三、并发模型:谁更适合高并发?现代应用普遍面临高并发挑战,不同语言提供了截然不同的解决方案。并发模型对比语言并发模型特点示例代码| Go | Goroutines + Channels(CSP 模型) | 轻量级协程(一个进程可启动百万 goroutine),由 runtime 调度,通信通过 channel 实现 |并发能力评分(满分5分)语言易用性性能安全性适用场景Go⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐☆高并发微服务Rust⭐⭐⭐☆☆⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐安全关键型系统Kotlin⭐⭐⭐⭐☆⭐⭐⭐☆☆⭐⭐⭐☆☆Android、Web 后端Python⭐⭐☆☆☆⭐⭐☆☆☆⭐⭐☆☆☆I/O 密集型脚本Java⭐⭐☆☆☆⭐⭐⭐☆☆⭐⭐⭐☆☆传统企业系统**Go 的优势在于“原生支持”**:只需 \`go\` 关键字即可启动协程,配合 channel 实现 CSP(Communicating Sequential Processes)模式,极大简化并发编程。**Python 的 GIL 是硬伤**:尽管有 \`multiprocessing\` 模块绕过,但进程间通信成本高,不适合高频交互场景。四、错误处理机制:如何应对失败?健壮的程序必须妥善处理错误。各语言采取了不同的策略。语言错误处理方式特点Go多返回值 +error接口函数返回(result, error),强制检查错误,逻辑清晰但代码略冗长RustResult+?操作符编译期强制处理,未处理的Result会导致编译失败,安全性极高Kotlin可空类型 + try-catchString?表示可能为空,?.和?:避免 NPE;异常用于非预期错误Pythontry-except-else-finally异常驱动,灵活但容易忽略异常,缺乏静态检查Java受检异常(checked exception)+ 非受检异常强制捕获受检异常,提高可靠性,但也增加代码负担示例:读取文件内容代码语言:Go// Go: 显式返回 error content, err := ioutil.ReadFile("file.txt") if err != nil { log.Fatal(err) }代码语言:Rust// Rust: Result 必须处理 let content = std::fs::read_to_string("file.txt") .expect("无法读取文件"); // 或使用 match / ?代码语言:Kotlin// Kotlin: 空安全 + try-catch val content: String? = try { File("file.txt").readText() } catch (e: IOException) { null } println(content ?: "默认内容")代码语言:Python# Python: try-except try: with open('file.txt') as f: content = f.read() except FileNotFoundError: content = "默认内容"代码语言:Java// Java: 受检异常必须处理 try { String content = Files.readString(Paths.get("file.txt")); } catch (IOException e) { e.printStackTrace(); }Rust 的错误处理是最安全的:它不允许你“假装没发生”,所有潜在错误都必须显式处理。Java 的受检异常争议较大:虽然提高了可靠性,但也导致大量 throws Exception 泛滥,反而降低了代码质量。五、类型系统:静态 vs 动态,强类型 vs 弱类型语言类型系统类型推导泛型支持空安全Go静态有限(:=)Go 1.18+ 支持,较基础否Rust静态,极强全面强大(trait bound、高阶生命周期)是(通过 Option)Kotlin静态,强全面强大(协变/逆变、inline class)是(String?)Python动态无3.5+ 支持类型注解(mypy)否(运行时报错)Java静态,较强有限(var in Java 10+)有(但存在类型擦除)否(NPE 常见)空安全对比(防 NPE)代码语言:Kotlin// Kotlin: 编译器阻止空指针 val name: String = getName() // 编译报错:可能为空! val name: String? = getName() // OK,但访问需判空 println(name?.length) // 安全调用代码语言:Rust// Rust: 使用 Option 避免空值 fn get_name() -> Option<String> { ... } let name = get_name(); match name { Some(n) => println!("{}", n.len()), None => println!("No name"), }代码语言:Java// Java: 运行时才抛出 NullPointerException String name = getName(); // 可能为 null System.out.println(name.length()); // 可能崩溃Kotlin 和 Rust 将“空值”建模为类型的一部分,从根本上预防了空指针异常。Java 和 Python 中 NPE/NPE-like 错误仍是生产事故的主要来源之一。六、内存管理:GC vs 所有权语言内存管理机制是否有 GC控制粒度安全性Go标记-清除 GC(低延迟)是中等高Rust所有权 + 生命周期否极高最高(编译时验证)Kotlin/JavaJVM GC(G1/ZGC等)是低高(但有暂停)Python引用计数 + 循环垃圾回收是低中(易内存泄漏)Rust 的“所有权”机制详解Rust 不依赖 GC,而是通过三个规则实现内存安全:每个值有唯一所有者值在其所有者离开作用域时被释放引用必须有效(不能悬垂)代码语言:Rust{ let s = String::from("hello"); // s 是字符串的所有者 } // s 离开作用域,内存自动释放(RAII) let s1 = String::from("hello"); let s2 = s1; // s1 被“移动”(move),不再有效 // println!("{}", s1); // 编译错误!s1 已失效这种机制避免了 GC 暂停,同时防止内存泄漏和悬垂指针。七、生态系统与社区活跃度语言生态成熟度主要领域包管理器社区规模Go成熟云原生、微服务、DevOpsgo mod大(CNCF 推动)Rust快速成长系统编程、WASM、区块链cargo中等偏上(增长迅猛)Kotlin成熟Android、JVM 后端Gradle/Maven大(JetBrains 支持)Python极其成熟AI/ML、数据分析、自动化pip最大之一Java最成熟企业级、金融、大数据Maven/Gradle最大之一典型生态代表Go: Kubernetes, Docker, Prometheus, Etcd, Gin/Fiber 框架Rust: Solana, Polkadot, Deno, Tauri, Actix-webKotlin: Android SDK, Ktor, Spring Boot, Compose MultiplatformPython: TensorFlow, PyTorch, Pandas, Django, Flask, JupyterJava: Spring, Hadoop, Kafka, Elasticsearch, Jenkins趋势观察:Go 已成为云原生时代的“标准语言”。Rust 正在渗透操作系统、浏览器引擎(Firefox)、区块链等领域。Kotlin 在 Android 开发中已基本取代 Java。Python 在 AI 领域形成垄断地位。Java 在金融、电信等传统行业仍不可替代。八、学习曲线与开发效率语言学习难度开发效率代码简洁度推荐人群Go★★☆★★★★☆★★★★★后端工程师、DevOpsRust★★★★★★★★☆☆★★☆☆☆系统程序员、性能敏感项目Kotlin★★★☆☆★★★★☆★★★★☆Java 开发者、Android 工程师Python★☆☆☆☆★★★★★★★★★★初学者、数据科学家、AI 工程师Java★★★☆☆★★★☆☆★★☆☆☆企业级开发者、应届生入门一句话总结学习体验:学 Python 像学英语,轻松上手;学 Go 像军训,纪律严明但高效;学 Kotlin 像给 Java 换新衣,熟悉又惊喜;学 Java 像读百科全书,全面但繁琐;学 Rust 像攀登珠峰,痛苦但登顶后视野开阔。九、适用场景推荐场景推荐语言理由云原生微服务API 网关Go > Rust > KotlinGo 启动快、资源省、并发强AI机器学习数据分析Python >> Java/Kotlin生态碾压,库丰富Android App 开发Kotlin > JavaGoogle 官推,更现代安全系统编程嵌入式WASMRust > C/C++安全性与性能兼备企业级后端 / 金融系统Java ≈ Kotlin > Go生态成熟、人才多、稳定性高CLI 工具 / DevOps 脚本Go > Python > RustGo 编译单一二进制,部署方便Web 前端(WASM)Rust > GoRust 对 WASM 支持更好十、发展趋势与未来展望(2025)语言当前地位发展趋势潜在挑战Go云原生事实标准持续主导微服务领域泛型支持仍待完善,缺乏泛型集合库Rust新兴系统语言被 Linux 内核接纳,前景广阔学习曲线陡峭,招聘难度大KotlinAndroid 主流多平台(JS/Native)潜力大JVM 依赖限制其独立发展PythonAI 领域霸主在教育、科研领域持续领先性能瓶颈明显,难以突破 GILJava企业基石稳定演进(Project Loom, Valhalla)技术债务重,创新缓慢预测:到 2027 年,Rust 有望成为操作系统和关键基础设施的首选语言。Go 将继续统治云原生后端服务。Kotlin 若能在多平台(尤其是 iOS)取得突破,可能成为真正的跨端语言。Python 在 AI 领域的地位短期内无法撼动。Java 将长期存在于 legacy 系统中,但在新项目中逐渐被 Kotlin 替代。总结:如何选择?选择标准最佳候选最高性能 & 最高安全性Rust最快开发 & 最大生态(AI方向)Python最简语法 & 最佳并发(后端服务)Go最平滑过渡(从 Java)& Android 开发Kotlin最稳定 & 最大企业生态Java终极建议:如果你是初学者 → 先学 Python如果你想做后端工程师 → 掌握 Go 或 Java/Kotlin如果你想挑战底层系统 → 挑战 Rust如果你想进入 AI 领域 → 精通 Python如果你想做安卓开发 → 必学 Kotlin
2026年10月28日
14 阅读
0 评论
0 点赞
2026-10-28
AI时代,程序员还有必要深度学习吗?
现象:学习意愿的“断崖式下降”当下,大模型秒写代码、一句话调试纠错、快速实现功能模块(特别是前端页面),AI编程工具彻底重构了软件开发的工作模式,使原本需要数小时查阅文档、调试语法、复现算法的任务,缩短至数秒至数分钟。随之而来的,是在程序员群体中蔓延的普遍迷茫:“我何必读文档?人类辛辛苦苦才能学会的,AI 一分钟就读完了。”“人类耗费数月打磨的语法、算法、底层原理,AI 一分钟就能完美输出。”这种效率幻觉,正悄然瓦解传统“积累式学习”的动力机制。常见误区:不仅 AI 有幻觉,人类幻觉更多且更大1. 成果等价误区:很多人把 “使用 AI 写出了代码” 等同于 “理解原理”部分零基础入门者、技术薄弱的从业者:借助AI输入需求,一键生成完整APP、功能模块、接口代码,程序可以正常编译、运行、实现效果,就默认自己已经掌握相关技术原理、具备开发能力。不是,哥们,你能解释代码为何能运行吗?出问题如何修复?凌晨线上故障谁排查?系统架构怎么迭代?数据安全问题谁兜底复盘?技术选型又是谁在权衡利弊,你知道利弊是啥么?银行 APP 用 AI 做的,让你去存钱,你敢存吗?怕不怕钱进去了没入账,机器门一关,连个记录都没有?这完全有可能发生,没启用事务,并发卡一下锁就行了;而且外行检查 100 遍也找不到问题,因为事务是啥他都不知道。一些需要深度思考、底层认知、经验沉淀的工作,永远需要人类程序员承担责任。AI是高效的执行工具,但从来不是负责兜底的责任人。用 AI 做的产品就像一台咖啡机,你可以自己拿来磨磨咖啡,你不能拿它开咖啡店,更不能销售这台咖啡机,不稳定因素太多(机器卡顿、故障、适配异常),而你什么也解决不了,搞不好机器里边漏机油你还说味道真特别。这种“假性掌握”,是彻底的浅层能力,无法支撑复杂开发、问题排查和技术迭代。2. 能力替代误区:AI会学,我就不用学多数程序员的惰性根源,都来自这一误区。大家直观感受到,自己花几周学会的算法、框架用法、语法规则,AI几秒就能输出,便产生“学习无用”的错觉,主动放弃深度学习和基础积累。甚至有人认为,只要会提需求、会用AI,就能替代所有技术学习,彻底摆脱底层知识积累。但事实是,AI的知识库,就是人类过往的学习成果。AI只会整合、复刻已有的公开知识,无法自主创新、深度思考和场景变通。程序员如果放弃学习,就失去了甄别AI代码优劣、修正AI错误、适配特殊场景的能力。不懂算法原理,就看不出AI算法的性能漏洞;不懂网络底层,就无法修复AI生成代码的网络异常;不懂系统逻辑,就无法适配复杂的业务场景。AI是工具,不是大脑,放弃自我学习,本质是主动放弃核心技术思维。3. 结果万能误区:AI生成的代码,就是最优代码很多开发者对AI存在绝对信任误区,默认大模型生成的代码规范、高效、无漏洞,无需校验、优化和重构,直接照搬上线。在简单demo、小型项目中,AI代码确实可以正常运行,让人误以为其完全可靠。但在真实工程场景中,AI代码普遍存在隐性问题:冗余代码过多(比如规范封装,这需要全局观)、逻辑耦合严重、性能损耗高、边界场景未兼容、存在安全漏洞(复旦大学:《AI 生成代码在野安全风险研究》),且无法贴合项目整体架构和业务规范。AI只会根据通用最优解生成代码,不会结合项目的技术栈、并发量、用户体量、迭代需求做定制化优化。没有深度学习积累的优化能力和工程思维,盲目照搬AI代码,会给项目埋下大量隐性隐患,后期运维、重构的成本极高。这里就不再一一列举了,还有比如有的人 “全程依赖AI,放弃独立思考”,有的人认为 “通用代码可直接适配所有业务”,实际上:AI 是优秀的执行者,但不是合格的决策者。没有深度学习基础,你无法判断 AI 给出的“最优解”是否在业务上下文中成立。案例:AI 失误的代价某金融公司使用 AI 生成信用评分模型,未理解“特征重要性”与“因果性”的区别,导致模型在监管审计中被判定为歧视性算法,罚款 2300 万元。某电商推荐系统依赖 AI 自动生成召回策略,因未理解负采样机制,导致长尾商品曝光率下降 68%,季度营收损失超 1.2 亿元。AI 不会犯错,但使用 AI 的人会。错误不在工具,而在认知的真空。行动:能力转型,从“编码工”到“AI协作者”基础知识的深度学习任然非常重要,只是学习的目标不再是手搓代码,而是:以前未来熟记语言语法、框架 API理解算法原理、模型行为边界手动写循环、条件判断建立宏观工程模型、评估 AI 输出质量追求“写得快”追求“说得清”:为什么选这个模型?为什么不用那个?未来的程序员,不需要做最会写代码的人,但一定要做最懂技术、最懂系统、最懂业务、最会解决问题的人。这些能力正在逐渐成为程序员的核心护城河(这些在以前其实也是核心护城河,个人来评定的话,懂业务其实是最重要的)。放弃深度学习的程序员,会逐渐沦为AI的“复制粘贴工具人”,被行业迭代淘汰;坚持深度深耕、迭代学习的程序员,会借助AI放大自身能力,实现职业价值的跨越式提升。AI 会取代那些只会“复制粘贴”的程序员,但不会取代那些能理解“为什么这样复制”的人。深度学习,不是程序员的选修课,而是数字时代的基础素养。它不再关乎记忆,而关乎判断力、批判性思维与系统性设计能力。你不需要比 AI 记得更多,但你必须比它想得更深。
2026年10月28日
9 阅读
0 评论
0 点赞
2026-10-23
宝塔面板:PHP 严重安全漏洞修复及防护方案
针对 PHP CVE-2026-109618、CVE-2026-109619 两项严重安全漏洞,宝塔已同步相关 PHP 安全修复版本,并提供首页风险一键加固功能。用户可结合 Nginx 防火墙、系统加固、防入侵和 PHP 网站安全告警,完成漏洞处置及后续防护。宝塔是国内首家针对本次漏洞手动适配旧版 PHP 安全补丁的运维面板服务商,并提供独家修复包与面板内更新方案。 目前已为 Linux 的 PHP 7.0、7.1、7.2、7.3、7.4、8.0、8.1 提供安全修复包,帮助仍依赖旧版 PHP 的用户完成本次漏洞修复。其中,PHP 7.0 至 7.3 已支持通过面板软件商店更新;另提供通过 AI 辅助与人工代码对比完成漏洞修复的 PHP 5.6.41 宝塔 AI 修复版,邀请用户协助业务测试。本次漏洞可能导致未经身份验证的远程代码执行。请受影响用户优先安装 PHP 安全补丁;暂时无法升级的用户,请先执行一键加固,并开启相关防护。具体修复方案及操作步骤如下。以下安全中心与插件操作以宝塔 Linux 面板为例,Windows 用户请按照下方说明选择 PHP 修复版本。安装 PHP 安全补丁无需先升级面板。安装 PHP 安全补丁无需先升级宝塔面板。Linux 的 PHP 7.0 及以上版本可通过软件商店升级;PHP 5.6.41 宝塔 AI 修复版目前开放测试,安装命令及验证说明见下文。请先检查网站实际使用的 PHP 版本,再选择对应的更新方式。PHP 安全修复版本#本次漏洞已提供的修复版本及测试版本如下,请留意各版本的适用说明:PHP 分支修复版本适用说明PHP 8.58.5.12PHP 官方安全修复版,Linux 与 Windows 面板均已同步PHP 8.48.4.27PHP 官方安全修复版,Linux 与 Windows 面板均已同步PHP 8.38.3.36PHP 官方安全修复版,Linux 与 Windows 面板均已同步PHP 8.28.2.35PHP 官方安全修复版,Linux 与 Windows 面板均已同步PHP 8.18.1.35宝塔打包的 Linux 修复版PHP 8.08.0.31宝塔打包的 Linux 修复版PHP 7.47.4.34宝塔打包的 Linux 修复版PHP 7.37.3.34宝塔打包的 Linux 修复版,可通过软件商店更新PHP 7.27.2.35宝塔打包的 Linux 修复版,可通过软件商店更新PHP 7.17.1.34宝塔打包的 Linux 修复版,可通过软件商店更新PHP 7.07.0.34宝塔打包的 Linux 修复版,可通过软件商店更新PHP 5.65.6.41宝塔 AI 修复版,开放测试;暂通过命令安装针对已停止 PHP 官方安全维护的 PHP 7.4、8.0、8.1,宝塔已应用 PHP 官方提供的回补补丁,完成 Linux 修复包打包并提供面板内升级,便于仍依赖旧版 PHP 的用户及时处置本次漏洞。Windows 的 PHP 8.1 及更早版本当前需修改配置、禁用相关功能进行临时缓解,并尽快规划迁移至受支持的 PHP 分支及对应安全修复版本。PHP 7.0 至 7.3 的修复包由宝塔基于 PHP 7.4 的官方补丁逐行比对、回移适配,现已支持面板内更新。 上述旧版 PHP 均已停止 PHP 官方安全维护,仍建议尽快规划迁移至受支持的版本。完整的修复情况和临时配置说明参见 PHP 安全更新公告。
2026年10月23日
9 阅读
0 评论
0 点赞
2026-10-23
PHP紧急修复两大漏洞:只更新网站和插件,可能还不够
10 月 21 日晚,PHP 官方突然把安全补丁提前发布——两个可被未认证远程利用的"核弹级"漏洞(CVE-2026-109618 与 CVE-2026-109619,被安全社区称为 "PHP2Shell")的信息在论坛上被人提前捅了出来。这篇文章把这件事讲透:漏洞原理、真实危害,以及补丁发布后为什么反而更危险、你现在该怎么办。事件回顾:两个漏洞是怎么被"提前捅出来"的按照原计划,这两个漏洞应在 10 月 22 日 14:00(utc)走完正常的协同披露流程。但 10 月 20 日 15:00(utc)前后,两个 cve 编号就开始在论坛和社交媒体上流传——hacker news 上一位名为 "petecooper" 的用户发帖称 php 存在两个严重 rce 漏洞(该帖随后被删除),帖子里还附带了错误的披露时间和错误的 cvss 满分 10.0 评分(官方实际评分为 9.2)。PHP 官方被迫把预告提前到 20 日 19:30(UTC)发布,并把补丁从 22 日提前到 21 日 14:00(UTC),也就是北京时间 21 日晚 10 点左右——这正是视频里说的"今晚十点紧急修漏洞"。在此期间还出了两档子事:安全公司 Calif 误发了一段漏洞利用演示视频(虽很快删除,副本已在社交媒体流传),直接加速了各种利用程序的出现;Chainguard 又在 21 日早 7 点 41 分(UTC)单方面打破 embargo、发布了带修复的容器镜像——攻击者在别人还没拿到补丁时,就已经能研究补丁本身了。安全公司 watchTowr 随后确认这两个漏洞真实存在,并成功复现了其中一个。至此,一场围绕"补丁手速"的全球赛跑正式开场。漏洞原理:两个"未认证 RCE"到底是怎么回事CVE-2026-109618(OOM 内存破坏):PHP 通过 memory\_limit 限制单个请求的内存,请求超限时会用 longjmp() 直接中断。如果中断发生时请求数据只初始化了一半(例如正在解析表单文件上传),请求清理阶段就可能把无效数据当成有效数据,去释放一块从未初始化的内存——而那块内存里,可能还残留着攻击者此前可控的数据。CVE-2026-109619(过期全局状态,类似 use-after-free):请求拥有的内部状态,在其内存已被释放后(例如发生致命错误之后)仍然存活。同一个 worker 进程处理的后续请求,可能在正常初始化重置之前,就使用到这些"过期状态"。两个漏洞都位于几乎每个请求都会经过的内存管理和错误处理环节——这是它们影响极大、也极难修复的根本原因。更关键的是:利用它们不需要任何账号密码,一个构造好的 HTTP 请求即可触发;在 Apache mod_php 环境下,已有实证的攻击可以在任何应用代码运行之前就打进来。所有处理 Web 请求的 PHP 形态都在影响范围内:PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed,官方认为 mod_php 风险最高。这次漏洞的危害到底有多大1. 覆盖面:互联网的"底座"出了裂缝。全球约七成网站的服务器端运行在 PHP 上——WordPress、Drupal、Joomla、MediaWiki(维基百科背后的软件)、Magento、WooCommerce、Laravel、Symfony 等生态全部建立其上。有安全机构估算,暴露在公网的 PHP 主机超过 500 万台。Wiz 的评价一针见血:这是 PHP 引擎自身的缺陷,"即使网站自己的应用代码是安全的,也可能被拖下水"——你的代码没漏洞,但运行代码的引擎有。2. 攻击门槛:低到不能再低。未认证远程代码执行,不需要登录、不需要用户交互。荷兰国家网络安全中心(NCSC)的表述是:一个简单的 POST 请求,可能就足够在目标服务器上执行外部代码,拿到的权限就是 Web 服务进程的权限。3. 应用层防护全部失效。攻击发生在应用代码执行之前,这意味着 WAF 的应用层规则、Laravel/Symfony 框架自身的安全检查、WordPress 等 CMS 的防护,在这个阶段都还没有启动。正如业内评论所说:一个防护做得再好的自研系统,和一个裸奔的 WordPress 站,在这件事上站在同一起跑线上。4. 连锁后果严重。一旦拿下 Web 进程权限,攻击者可以挂 webshell、种挖 矿木马、读取进程内存里的数据库凭证和 API 密钥做横向移动;可以把网站变成钓鱼和恶意软件分发渠道——借合法站点的"信誉"骗用户;勒索软件和 APT 组织也把它当成现成的入口。Webshell、数据窃取、网站接管、业务中断,都只是起点。5. 旧版本"没人管"是最大隐患。官方补丁只覆盖 8.2–8.5 四个在维护分支,PHP 8.1 及更早版本官方已不再提供更新(仅发布了 7.4/8.0/8.1 的极简源码级移植)。而视频援引的统计显示:近六成线上 PHP 站点还跑在已停止维护的分支上——这些站点要么购买厂商商业支持,要么制定迁移计划,要么就是在"裸奔"。此外,大量内网系统、OA/CRM 和第三方软硬件产品内嵌的 PHP 也是重灾区,荷兰 NCSC 不得不专门发布了一份"内嵌 PHP 的产品清单"。6. 这不是纸面风险,攻击已经开打。Amazon 威胁情报在其蜜罐网络中发现:10 月 17 日——比公开披露早 4 天——就出现了来自匿名化网络 IP 的攻击尝试;21 日凌晨 2 点至 8 点(UTC),又有多拨攻击者从不同的匿名基础设施发起利用;embargo 解除后数小时内 PoC 集中涌现,传感器"几乎立即"被打。Hadrian 称 PHP2Shell 正在野外被大规模利用,多数攻击走 PHP 的 session upload-progress 路径;Cloudflare、Patchstack、Vega 等也都观测到了攻击尝试。watchTowr 的告诫值得所有人警惕:"目前还没有成功的,但别指望这种状况能持续多久。"荷兰多家网站、安全论坛和政府门户一度主动下线避险,英国、新加坡、瑞士和欧盟 CERT 先后发布紧急警报。补丁都发了,网站为什么反而更危险这正是视频里最扎心的观点,也是 AWS 事后复盘中总结的核心教训:1. 补丁本身就是"漏洞地图"。攻击者对比修复前后的代码或二进制差异,就能反推漏洞位置和触发条件。AWS 的原话是:AI 辅助分析让"把补丁差异或公告变成可用利用程序"的成本大幅下降,更多攻击者能在披露后几小时甚至几分钟内完成武器化。视频里那句"以前这一步要高手研究好几天,现在有 AI 帮忙",说的就是这个变化。2. Chainguard 提前发布带修复的镜像,等于提前交了"标准答案"。在其他用户还在等正式发布的那个早上,攻击者已经可以研究补丁的二进制形态了。3."补丁发布日"根本不是"攻击开始日"。Amazon 的发现证明:早在公开披露前 4 天就有攻击尝试——说明在 embargo 期间就有威胁方拿到了利用信息,或者独立发现了同一个漏洞。AWS 由此建议:应急调查要从最早已知的利用时间(10 月 17 日)开始查,而不是从公告日期开始。4. 全网修复是一条长尾。更新只是第一步:还要重启 PHP-FPM/Apache(内存里运行的可能还是旧代码)、容器要重新构建部署、共享主机和第三方产品要等厂商排期。官方发布补丁的那一刻,恰好是 PoC 集中爆发、而绝大多数站点还没打完补丁的时刻。就像视频里说的:"今晚十点以后,是一场比手速的比赛。"5. 攻击面还在扩大。Hadrian 提醒:目前多数攻击滥用 session upload-progress 路径,在补丁发布前后,预计还会出现更多利用路径——指望一个补丁加一条 WAF 规则就高枕无忧,并不现实。现在该怎么办如果你运维网站或服务器:立刻升级到 PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35(或操作系统厂商已打好补丁的对应包),升级后必须重启 PHP 服务;容器环境要重新构建并部署。升级是唯一彻底的修复手段,没有纯配置方案能同时堵住两个漏洞。实在无法立即升级的,按官方临时缓解措施降低暴露:memory\_limit 设为 -1(用 php\_admin\_value 等应用改不动的方式);post\_max\_size 压到 8M(有上传需求的 32M);session.upload\_progress.enabled=0 并重启所有 worker;PHP 8.5 另设 fatal\_error\_backtraces=0;在 Web 服务器或代理层限制请求体大小、字段数、multipart 分片数、头部数量和嵌套深度。8.1 及更旧版本:联系厂商索取 backport 补丁,或尽快制定迁移计划;短期内可考虑先限制访问或临时下线。查日志、查后门:重点排查包含 PHP\_SESSION\_UPLOAD\_PROGRESS 字样的 POST 请求,检查异常进程和文件改动;调查时间起点至少推到 10 月 17 日,别只盯着公告之后的时间段。WAF/云厂商虚拟补丁可以顶一时(Cloudflare、AWS、Akamai 均已发布规则),但它挡不住全部攻击路径,不能替代升级。如果你是企业负责人或普通用户:确认你的建站公司、托管服务商、SaaS 供应商是否在使用 PHP、是否已完成修补,让供应商给出书面确认;内部 OA、CRM 等系统同样要排查——它们内嵌的 PHP 往往最容易被遗忘。更长期的启示:AWS 总结的两条教训值得所有安全负责人记下:面向互联网的关键系统,补丁时效要按"小时"计,7 天或 30 天的 SLA 假设了一种已经不存在的延迟;检测能力不能依赖单一 CVE 特征码——最早的攻击,往往发生在特征码出现之前。写在最后:三十多岁的 PHP 依然是互联网的底座,而这次两个漏洞再次说明:底座级别的缺陷,杀伤力也是底座级别的。对攻击者来说,"补丁发布"是发令枪;对防守方来说,唯一的应对是把"打补丁"从按周计的项目,变成按小时计的肌肉记忆。这场比手速的比赛,从现在就已经开始了。
2026年10月23日
8 阅读
0 评论
0 点赞
1
2
3
0:00