PHP 8.4.26受CVE-2026-109618和CVE-2026-109619影响,漏洞位于请求解析初期的内存管理阶段,早于任何PHP脚本执行,HMAC签名无法干预PHP引擎内部行为,故完全无效;唯一有效修复是升级至8.4.27并重启全部工作进程。

PHP 8.4.26 本身不带反序列化漏洞,但它是受 CVE-2026-109618 和 CVE-2026-109619 影响的版本(官方修复版为 8.4.27)。这两个是底层引擎级远程代码执行漏洞,与反序列化逻辑无关,也**无法通过加 HMAC 签名来修复**。HMAC 签名解决的是请求完整性与身份校验问题,而该漏洞在请求解析初期就触发,连业务代码和 unserialize() 都还没运行。
为什么 HMAC 签名对 php2shell 漏洞无效
HMAC 签名保护的是「你发出去的请求没被篡改」,但它完全不干预 PHP 引擎内部的内存管理行为:
- 漏洞触发点在 PHP-FPM 进程处理 HTTP 请求头/体时的初始化阶段,早于任何 PHP 脚本执行
- 攻击者无需构造合法参数,仅靠畸形 Content-Length、分块编码或上传进度字段就能触发 OOM 或状态复用
- 即使你给每个请求加了完整 HMAC 签名,Web 服务器照样会把原始恶意请求交给 PHP 解析
- 签名验证逻辑本身(比如在 index.php 里)根本没机会运行——进程已在解析阶段崩溃或执行任意代码
真正有效的防护动作
必须从运行时环境入手,不能依赖应用层逻辑:
- 立即升级 PHP 至 8.4.27:这是唯一被官方确认修复的版本,其他手段均为临时缓解
- 重启全部 PHP-FPM 工作进程:升级后不重启,旧进程仍携带未修复的引擎状态
- 若暂时无法升级,可临时启用 Web 服务器层防护:
- Nginx:限制 client_max_body_size、禁用 upload_progress
- Apache:关闭 mod_php(改用 CGI/FastCGI),因 mod_php 被列为风险最高
- 检查是否使用 FrankenPHP / LiteSpeed:这些同样受影响,需同步更新其内嵌 PHP 引擎
什么时候才该加 HMAC 签名
如果你的业务中确实存在可控的 unserialize() 调用(例如接收用户提交的序列化配置、缓存数据恢复等),那 HMAC 签名是有价值的:
立即学习“PHP免费学习笔记(深入)”;
- 对要序列化的数据先计算 HMAC(密钥服务端保管),拼接在数据末尾或单独传 signature 字段
- 反序列化前严格校验签名,失败则直接拒绝,不调用 unserialize()
- 注意:签名必须覆盖完整原始字节流,不能只签 JSON 解析后的数组,否则绕过成本极低
- 更推荐方案:彻底避免接收用户控制的序列化数据;改用 JSON + 白名单字段校验
当前最紧急的事不是写签名逻辑,而是确认线上所有 PHP 实例是否已运行 8.4.27 并完成进程重启。



















