必须升级至8.5.12/8.4.27/8.3.36/8.2.35等官方修复版本,因PHP2Shell(CVE-2026-109618/CVE-2026-109619)是内核级内存缺陷,WAF、php.ini配置或业务代码均无法根本拦截,8.1及更早版本无补丁,需迁移至受支持分支。

必须升级到官方发布的修复版本,没有其他绕过方式。PHP2Shell(CVE-2026-109618 / CVE-2026-109619)是内核级内存缺陷,存在于 PHP 解释器底层,业务代码、WAF 规则、php.ini 配置调整都不能从根本上拦截攻击。
确认当前版本是否受影响
在服务器或容器中运行以下命令:
-
CLI 场景:执行
php -v -
FPM 或 Web 场景:执行
php-fpm -v(Linux)或查看 phpinfo() 页面中的版本号
若显示为以下任一版本,即明确受影响,需立即升级:
- PHP 8.5.x 且低于 8.5.12
- PHP 8.4.x 且低于 8.4.27
- PHP 8.3.x 且低于 8.3.36
- PHP 8.2.x 且低于 8.2.35
PHP 8.1 及更早版本(含 7.4、7.3 等)无官方修复版,只能迁移至受支持分支。
按环境选择升级路径
容器环境(Docker):
- 修改
Dockerfile中的FROM行,例如:
从php:8.5.11-apache改为php:8.5.12-apache(注意选用对应 Alpine/CLI/FPM 标签) - 删除旧镜像:
docker rmi your-app:latest - 重建并启动:
docker build -t your-app:new . && docker-compose down && docker-compose up -d - 禁止在容器内用
apt upgrade php—— 官方预编译二进制无法被包管理器覆盖
Linux 裸机 / 虚拟机(如 Ubuntu/CentOS):
- 从 php.net/downloads.php 下载对应平台的 官方二进制包(非系统源)
- 停止服务:
systemctl stop apache2或systemctl stop php8.5-fpm - 替换 PHP 二进制、扩展(.so)、配置目录(如
/etc/php/8.5) - 更新 Web 服务器配置中 PHP 的路径(Apache 的
LoadModule或 Nginx 的fastcgi_pass) - 完整重启:
systemctl restart apache2或systemctl restart php8.5-fpm,确保所有 worker 进程已退出并由新版拉起
Windows 环境:
- 必须下载带 -1 后缀 的重发版,例如:
php-8.5.12-1-nts-Win32-vs17-x64.zip(初版存在 Brotli 补丁遗漏) - 解压覆盖原安装目录,检查
php.ini中扩展路径和模块是否仍有效 - 重启 IIS 或 Apache 服务
升级后必须验证的三件事
仅改版本号不等于修复完成,需逐项确认:
- 执行
php -v和php-fpm -v,输出版本号与目标一致(如8.5.12),且无警告提示 - 访问 phpinfo() 页面,检查
Server API显示为FPM/Cgi或Apache 2.0 Handler,且Loaded Configuration File指向新路径 - 重启后访问网站功能正常,特别是上传、表单提交、数据库连接等核心流程无报错
老版本 PHP(如 7.4、8.0、8.1)怎么办
这些版本已停更,PHP 官方不提供补丁:
- 短期应急:收紧防火墙策略、关闭
session.upload_progress.enabled、禁用危险函数(exec,system,shell_exec等) - 中期过渡:使用安全团队提供的“最小化源码回移植”分支(需自行编译,仅限 7.4/8.0/8.1,不推荐生产直接使用)
- 长期方案:将应用迁移至 PHP 8.2+,同步升级框架、扩展与依赖库;MetInfo V8.1、WordPress 6.7+ 等主流 CMS 已完成兼容适配
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











