PHP 8.4 本身非漏洞源头,但若版本低于安全基线 8.4.27(2026年10月21日发布),且运行在 PHP-FPM、Apache mod_php 等 Web 部署形态下,即受 CVE-2026-109618/109619(PHP2Shell)影响,可被未认证远程代码执行。

上线前做完整漏洞扫描,核心不是“扫得全”,而是“扫得准、判得清、改得稳”。PHP 8.4 本身不是漏洞源头,但若运行在含 CVE-2026-109618 / CVE-2026-109619(即“PHP2Shell”)的旧版本上,哪怕只差一个小版本号,网站就可能被远程执行代码——这比任何插件或配置漏洞都危险。
确认 PHP 实际运行版本是否安全
别只信 php -v。CLI 版本和 Web 环境常不一致:
- 查 PHP-FPM:运行
php-fpm -v或php-fpm8.4 -v(取决于你启用了哪个二进制) - 查 Apache mod_php:执行
apachectl -M 2>/dev/null | grep -i php,再配合<?php phpinfo(); ?>页面确认实际版本(放完立刻删) - 对照安全基线:必须 ≥ 8.4.27(2026年10月21日发布)。8.4.26 及更早全部不安全
检查是否处于高危部署形态
PHP2Shell 不挑框架,只挑运行方式。以下任一成立即需优先处置:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 使用 Apache mod_php(风险最高,请求未进应用层就可触发)
- 使用 PHP-FPM(默认配置下 worker 复用会放大 stale state 风险)
- 启用 session.upload_progress.enabled=1(官方明确建议关闭)
- 未禁用 fatal_error_backtraces(PHP 8.5+ 可设为 0,8.4 无此选项,靠升级兜底)
运行轻量但有效的本地检测脚本
不用装复杂工具,一段 Bash 就能快速筛查关键风险点:
立即学习“PHP免费学习笔记(深入)”;
- 检查内存限制是否人为放宽:
grep -r "memory_limit.*-1" /etc/php/*/fpm/php.ini /etc/php/*/apache2/php.ini 2>/dev/null(-1会加剧 OOM corruption 利用) - 确认 session upload 进度是否关闭:
php -i | grep "upload_progress.enabled",输出应为off - 验证扩展兼容性:运行
php -m,重点看opcache、pdo_mysql、mbstring是否加载成功;若用imagick或redis,需确认其版本支持 PHP 8.4
绕不开的代码兼容性预检
PHP 8.4 本身不会引入新漏洞,但升级过程若跳步(如从 7.4 直升 8.4),会激活大量静默行为变更:
- 用
php -l扫描所有入口文件(index.php、wp-load.php等),发现语法硬错误 - 开启
E_ALL | E_STRICT并跑一遍核心业务流,捕获Deprecated: Creation of dynamic property类告警(它们是 9.0 升级的预警信号) - 重点检查:
each()、$str{0}、money_format()、未定义常量直接使用等——这些在 8.4 下直接报 Fatal - 若有自研或老旧扩展,务必确认其源码已适配 PHP 8.4 的 ZTS/NTS 变更与 API 剥离(如 IMAP 已移出核心)


















