PHP 8.4.27 是修复 CVE-2026-109618 和 CVE-2026-109619 的正式安全版本,需确认其真实生效:通过 phpinfo() 页面验证 Web 实际运行版本,而非仅依赖 php -v 或未重启服务的升级操作。

PHP 8.4.27 就是修复 CVE-2026-109618 和 CVE-2026-109619 这两个 RCE 漏洞的正式版本,不是“带漏洞的版本”——你不需要对 8.4.27 做额外修复,而是要确认它是否真正生效。
确认当前运行的 PHP 版本是不是真为 8.4.27
很多运维人员执行了升级命令,但没重启服务,导致 Web 服务器仍在用旧进程跑老版本。最可靠的方式是直接让 PHP 自己说话:
- 在 Web 可访问目录下新建
phpinfo.php,内容为<?php phpinfo(); ?>,通过浏览器打开,搜索 “Version”,看右栏显示是否为8.4.27 - 终端执行
php -v只能查 CLI 版本,不能代表 Web 请求实际使用的版本;PHP-FPM 用户必须查php-fpm -v或看ps aux | grep php-fpm对应进程的启动路径 - 宝塔、AMH、cPanel 等面板用户,务必进到“PHP 管理”页,点“重载配置”或“重启服务”,不能只点“切换版本”就认为完成
升级后仍被扫描或报错的常见原因
即使版本号正确,也可能因环境残留导致风险未解除:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 某些 Docker 镜像(如
php:8.4-apache)在 10 月 21 日前构建的层仍含旧二进制,apt update && apt install -y php8.4不会覆盖已安装的libphp.so,必须重建镜像或手动替换/usr/lib/apache2/modules/libphp.so - PHP-FPM 配置中若启用了
clear_env = no,且旧进程未完全退出,可能复用上一代环境变量和共享内存段,建议加kill -USR2强制平滑重启,而非仅 reload - 部分 Nginx + PHP-FPM 部署中,
fastcgi_pass指向的是 socket 文件路径(如unix:/var/run/php/php8.4-fpm.sock),但该 socket 实际由旧版 FPM 进程监听——需检查ls -l /var/run/php/的 socket 创建时间,并比对systemctl status php8.4-fpm的启动时间
无法立即升级到 8.4.27 的临时缓解动作
官方明确表示“没有完整替代补丁的配置缓解方案”,但以下操作可提高利用门槛(仅限过渡期,不可代替升级):
立即学习“PHP免费学习笔记(深入)”;
- Apache mod_php 用户:在
httpd.conf或虚拟主机配置中添加php_admin_flag engine off,仅对非 PHP 资源目录启用,避免攻击在路由前触发 - PHP-FPM 用户:在池配置(如
www.conf)中设pm.max_requests = 500(而非默认 0),强制 worker 定期回收,降低 stale state 复用概率 - 所有环境:关闭
display_errors = Off并确保log_errors = On,防止 OOM 错误信息泄露内存布局细节,这对 CVE-2026-109618 的利用链有干扰作用
最关键的遗漏点:很多人升级完只验证了首页,但没测 phpinfo() 页面是否还能访问——这个页面本身就会暴露版本和扩展细节,而攻击者正依赖这些信息选择对应载荷。只要它还开着,就等于把钥匙挂在门把手上。


















