10 月 21 日下午,日本的《赛马娘》玩家像往常一样点开游戏,迎接他们的不是熟悉的赛道,而是一行维护公告。标题写得客气:“Maintenance to Address PHP Vulnerability”—— 为修复 PHP 漏洞进行维护。
大多数人只扫到了 “维护” 两个字。在手游的日常里,维护无非是版本更新、修 bug、发补偿,一周总要遇上一两次。但这一次不一样。没人告诉他们,游戏停服的根源,是 1994 年一个程序员为了统计自己简历的访问量,随手写下的几行代码。

从简历计数器,到互联网的隐形地基
1994 年,丹麦裔加拿大人 Rasmus Lerdorf 想知道有多少人看过自己的在线简历。
在静态网页当道的年代,想让服务器实现动态统计并不简单。你得用 C 或者 Perl 写 CGI 脚本,编译、配置、调权限,一步出错整个服务就可能宕掉。Rasmus 自己用 C 写了一套小程序,取名 “Personal Home Page Tools”—— 个人主页工具,刚好能满足他的需求。
第二年 6 月,他把源码公开了。理由很朴素:希望有人能帮忙改改 bug。
接下来是一连串的迭代与更名。同年 9 月它叫 FI(Forms Interpreter,表单解释器),10 月升级为 “个人主页构建工具包”;1996 年 4 月,版本迭代为 PHP/FI。直到 1997 年,两名以色列学生 Andi Gutmans 与 Zeev Suraski 觉得这套工具不够用,重写了解析器,三人合作推出 PHP 3,并正式将名称定为 “PHP: Hypertext Preprocessor”。
PHP 能火遍全球,和技术 “高不高级” 没多大关系。它最大的优势是 “省事”:无需编译,文件传到服务器,浏览器访问就能运行;当年几十块钱一个月的虚拟主机,默认附赠 PHP+MySQL 环境,用 FTP 把文件拖上去就能跑网站。同样的事换 Java 做,要装环境、打包、部署,还得专人运维服务器。
它的门槛也足够低。语法宽松,变量不用提前声明,哪怕代码写错了,页面也能勉强跑出结果。这让它成了一代非科班开发者的入门语言。中国互联网的论坛时代,从游戏攻略站到玩家公会,后台大多是 Discuz!—— 一套 PHP 写的论坛程序;全球博客浪潮里,撑起无数个人站点的 WordPress,同样基于 PHP。
三十年后,当年的简历计数器,长成了互联网的地基。直到今天,全球仍有约 70% 的网站在使用 PHP,占比甚至比它被全网嘲讽的那些年还要高。
2001 年 7 月,PHP 官方文档里出现过一句话:“PHP is the best language for web programming, but what about other languages?”
这句话在官方文档里挂了十几年,2014 年前后才被移除。国内程序员把它浓缩成 “PHP 是最好的语言”,一调侃就是二十年。

两个高危漏洞:无需登录,直接接管服务器
时间回到 10 月 21 日。
PHP 安全团队在当天发布了两个漏洞补丁:CVE-2026-109618 与 CVE-2026-109619,严重度评分均为 9.2(满分 10),涉及 PHP 8.5.12、8.4.27、8.3.36、8.2.35 等多个版本。
两个漏洞的成因,都藏在常人不会注意的底层逻辑里。 一个出在内存耗尽处理机制:PHP 通过长跳转中止超限请求时,可能打断正在解析的表单上传流程,导致清理程序将未初始化的内存当作正常数据释放,而这块内存里,可能残留着攻击者上一次注入的恶意内容。 另一个是请求间的状态残留:一个请求的内存被释放后,内部状态并未清空;下一个请求若由同一个工作进程处理,就会复用这些过期的残留数据。
通俗来说:攻击者不需要账号密码,只要发一条普通的 HTTP 请求,在网站的任何一行业务代码运行之前,就能让服务器执行任意命令。
它的影响范围覆盖 PHP 5.4.0 以来的所有版本。WordPress、Drupal、Joomla、Magento、Laravel、WooCommerce,所有用 cPanel 或 Plesk 搭建的站点,全部在攻击范围内。更棘手的是,常规的 WAF(Web 应用防火墙)根本拦不住 —— 因为漏洞发生在应用层之前。
没有临时方案,只能停服
更麻烦的是,PHP 官方明确表示:没有完整的临时规避方案。
在安全行业的惯例里,爆出高危漏洞后,厂商通常会先给出几个配置修改方案,让用户先应急顶住,再排期打补丁。但这次不行。官方能给出的建议只有三条:把内存限制设为无限、关闭会话上传进度功能、限制上传文件大小 —— 这些只能缩减攻击路径,解决不了根本问题。
欧盟计算机应急小组 CERT-EU 的建议更直接:无法立即更新的机构,应该将公网服务器从公共网络中隔离。
“隔离” ,就是下线。
从 21 日下午开始,日本的游戏公司一家接一家地关闭了服务器。
《赛马娘》原定 UTC 时间 14:00 开始维护,中午 12:40 突然提前到 13:00,直到 20:00 恢复,全程七个小时。公告最后只提了两件事:维护结束,给所有玩家发放 150 个钻石补偿。
同一时间,《碧蓝幻想》《影之诗:Worlds Beyond》《公主连结!Re:Dive》相继进入维护;《刀剑乱舞 ONLINE》、DMM 平台、《刀剑神域:关键斗士》也在停服名单里;世嘉的《CHUNITHM》国际版单独发布了安全警告。

那一夜,停服的不只有游戏
玩家大多是懵的。
有人在社交平台连发几条:宝可梦 HOME 紧急维护,宝可梦 Champions 紧急维护,Switch 和 Switch 2 的在线服务全在紧急维护,任天堂到底出了什么事?
也有人摸到了真相:这不是任天堂一家的问题,是一个严重的 PHP 漏洞影响了大半个互联网,这些服务都得先关掉,等补丁。
国外游戏媒体 TheGamer 写道:“你打开这三款游戏,会看到维护提示。”
《赛马娘》的公告这么说道:“截至公告发布,我们未发现任何利用该漏洞入侵游戏系统、危及用户数据安全的情况。”
受影响的远不止游戏。pixiv、BOOTH、niconico、DLsite、BOOK☆WALKER,加上万代南梦宫、世嘉、Cygames 的官网,一批二次元相关站点在同一晚集体失联。
再往外延伸,BBC 的部分页面下线,芬兰中央政府、荷兰议会、爱丁堡市议会的网站临时关闭;4chan、BreachForums 等论坛挂掉,DeviantArt 与维基百科为部署补丁做了短暂维护,OBS Project 官网也在受影响名单里。
一门语言的两个漏洞,在同一天夜里,让半个互联网按下了暂停键。
风险才刚刚开始
补丁在 UTC 时间 21 日 13:30 正式发布,换算成北京时间是当晚九点半。
安全公司 Sansec 事前就发出警告:补丁发布后,大规模攻击可能在 15 分钟内启动。
这是安全行业最经典的悖论:补丁发布的瞬间,恰恰是风险最高的时刻。补丁出来之前,漏洞是秘密;补丁出来之后,漏洞细节彻底公开,而全球绝大多数系统还没来得及打上补丁。
这一次的情况更糟。早在 10 月 20 日晚,漏洞的技术细节就已经提前泄露,网上流传着名为 “php2shell” 的利用工具演示视频。有人比官方补丁早了整整一天,知道该怎么发起攻击。
剩下的一半,与未结束的余波
22 日起,服务陆续恢复。《赛马娘》的公告停在了 21 日 20:00 的版本,钻石到账,赛道重新开放,仿佛什么都没发生过。
思科旗下安全团队 Cisco Talos 给出估算:全球所有 PHP 系统中,大约有一半打不上这个补丁。PHP 8.1 及更早版本早已停止官方支持,不会再收到安全修复;8.2 版本的安全支持也只到 2026 年 12 月 31 日。
也就是说,再过两个月,又会有一大批站点滑入 “无补丁可打” 的队列里。
这些站点不会发布维护公告,也不会给用户发补偿。它们会安静地待在互联网的角落里,带着三十年前埋下的那颗雷,继续运行下去。
本文同步自微信公众号,查看原文。