Skip to content

PHP 重大漏洞修复 ​

2026-10-21,PHP 官方公布了两个严重漏洞:不用登录、不用任何账号,就能在你的服务器上执行任意代码。所有对外提供网页的 PHP 都受影响,请尽快处理。

我受影响吗 ​

只要店铺跑在 PHP 上就受影响,不管是 aaPanel(宝塔)、自己编译安装,还是 Docker。

修复过的版本是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上。8.1 及更旧的版本官方已经不再维护,不会出修复版,但下面的一键脚本也能修。

查自己的版本:

bash
php -v

aaPanel 装了多个 PHP 版本时,每个版本单独查,例如 /www/server/php/82/bin/php -v。

按你的部署方式选 ​

部署方式怎么修
aaPanel(宝塔)、自己编译安装的 PHP一键修复脚本
系统包安装的 PHP(apt / yum)用系统包管理器更新,发行版已经出了修复
Docker一键升级容器
虚拟主机改不了 PHP,联系主机商尽快升级

一键修复 ​

用 root 在服务器上执行:

bash
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
bash php-security-update.sh --check --harden

其它常用参数:

bash
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 ​

国内服务器下载不了脚本时,换这个地址:

bash
curl -fsSL https://cdn.jsdelivr.net/gh/lizhipay/php@main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden

Docker 用户 ​

官方镜像已经是修复后的 PHP 8.2.35,并且默认开启了 session 硬化,不用自己做任何设置。

在服务器上执行这一条,升级到最新镜像:

bash
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:

bash
php -v

版本号是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上就修好了。旧版本(7.x、8.0、8.1)版本号不会变,以脚本最后的结果为准。

再确认一下 session 硬化已经开启,输出 1 就对了:

bash
php -r 'echo ini_get("session.harden"), PHP_EOL;'

Docker:

bash
docker exec faka php -r 'echo PHP_VERSION, " ", ini_get("session.harden"), PHP_EOL;'

输出 8.2.35 1 就对了。容器名不是 faka 的,换成你自己的。

基于 MIT 协议开源