PHP 重大漏洞修复
2026-10-21,PHP 官方公布了两个严重漏洞:不用登录、不用任何账号,就能在你的服务器上执行任意代码。所有对外提供网页的 PHP 都受影响,请尽快处理。
- 官方公告:https://www.php.net/archive/2026.php#2026-10-21-5
- 漏洞编号:
CVE-2026-109618、CVE-2026-109619(CVSS 9.2) - 一键修复工具:https://github.com/lizhipay/php
我受影响吗
只要店铺跑在 PHP 上就受影响,不管是 aaPanel(宝塔)、自己编译安装,还是 Docker。
修复过的版本是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上。8.1 及更旧的版本官方已经不再维护,不会出修复版,但下面的一键脚本也能修。
查自己的版本:
php -vaaPanel 装了多个 PHP 版本时,每个版本单独查,例如 /www/server/php/82/bin/php -v。
按你的部署方式选
| 部署方式 | 怎么修 |
|---|---|
| aaPanel(宝塔)、自己编译安装的 PHP | 一键修复脚本 |
| 系统包安装的 PHP(apt / yum) | 用系统包管理器更新,发行版已经出了修复 |
| Docker | 一键升级容器 |
| 虚拟主机 | 改不了 PHP,联系主机商尽快升级 |
一键修复
用 root 在服务器上执行:
curl -fsSL https://raw.githubusercontent.com/lizhipay/php/main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden脚本会自动找出这台服务器上所有的 PHP,按来源和版本分别处理:
| 版本 | 怎么处理 |
|---|---|
| 8.2 / 8.3 / 8.4 / 8.5 | 升级到同系列最新的修复版 |
| 7.4 / 8.0 / 8.1 | 套用 PHP 官方的修复补丁后重新编译 |
| 7.0 – 7.3、5.4 – 5.6 | 套用本项目移植的修复补丁后重新编译 |
| 5.3 及更旧 | 只能套用官方建议的缓解设置 |
系统包装的 PHP(apt / yum)脚本不会动,只会告诉你该执行哪条更新命令。
会不会把店铺搞挂?
- 每个版本先编译好、检查通过才替换,替换前会完整备份。
- 新版启动失败会自动还原成旧版。
- 店铺只会在 PHP 重启时中断一两秒。
- 下载的 PHP 源码全部校验 SHA256。
编译要花的时间看服务器配置,从几分钟到半小时不等,建议挑访问量少的时候执行。
先看看会改什么
不放心的话,先只检查、不改动:
bash php-security-update.sh --check --harden其它常用参数:
bash php-security-update.sh --harden --only 74,82 # 只处理指定版本
bash php-security-update.sh --harden -y # 跳过倒计时,直接开始命令里的 --harden 是什么
--harden 会顺便开启 session 硬化,修掉另一个跟上面两个漏洞无关的老问题:攻击者可以借 PHP 的 session 机制塞进恶意对象,同样能执行代码。官方这次的修复不管它,所以本页的命令都带上了它。
开启后,session 里一律不允许出现对象。异次元店铺系统只往 session 存普通数据,完全不受影响。即使 PHP 已经是最新版,也会为它重新编译一次,把这个修复打进去。
如果同一台服务器还跑着别的 PHP 程序,而且它会把对象存进 session,开启后那个程序可能会出问题。遇到这种情况,把命令里的 --harden 去掉再执行即可。
连不上 GitHub
国内服务器下载不了脚本时,换这个地址:
curl -fsSL https://cdn.jsdelivr.net/gh/lizhipay/php@main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --hardenDocker 用户
官方镜像已经是修复后的 PHP 8.2.35,并且默认开启了 session 硬化,不用自己做任何设置。
在服务器上执行这一条,升级到最新镜像:
curl -fsSL https://raw.githubusercontent.com/lizhipay/acg-faka/main/docker/upgrade.sh | bash脚本会自动完成这些事:
- 找到本机的异次元店铺系统容器,
docker run、aaPanel、1Panel 创建的都行; - 先确认
/data挂了数据卷,没挂就停下,不冒丢数据的险; - 拉取最新镜像,用原来的端口、数据卷、环境变量、重启策略重建容器,数据原封不动;
- 新容器起不来会自动换回旧容器,店铺照常运行;
- 已经是最新版就什么都不做。
用 docker compose 安装的,脚本会自动更新源码并重新构建镜像。这一步要编译 PHP,需要几分钟到十几分钟。
看到这一行就说明升级成功了:
[acg-faka] 当前:PHP 8.2.35,session 硬化已开启后台的「在线升级」修不了这个漏洞
在线升级只更新网站程序。PHP 本身装在镜像里,只能靠换新镜像拿到修复。
也不要在容器里跑上面的一键修复脚本,Docker 用户换镜像就够了。
几种特殊情况:
- 提示没有权限:在
bash前面加sudo。 - 本机有多个异次元店铺系统容器:在命令最后加上容器名,例如
... | bash -s -- faka。 - 连不上 GitHub:把脚本地址换成
https://cdn.jsdelivr.net/gh/lizhipay/acg-faka@main/docker/upgrade.sh。 - 拉取镜像失败:多半是服务器连不上
ghcr.io。脚本会在动容器之前停下,店铺不受影响;给 Docker 配好代理或镜像加速后再执行一次。
修完怎么确认
aaPanel / 自己安装的 PHP:
php -v版本号是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上就修好了。旧版本(7.x、8.0、8.1)版本号不会变,以脚本最后的结果为准。
再确认一下 session 硬化已经开启,输出 1 就对了:
php -r 'echo ini_get("session.harden"), PHP_EOL;'Docker:
docker exec faka php -r 'echo PHP_VERSION, " ", ini_get("session.harden"), PHP_EOL;'输出 8.2.35 1 就对了。容器名不是 faka 的,换成你自己的。
