PHP 7.4.25已EOL,无法通过自身升级修复session反序列化漏洞;该漏洞源于不安全业务逻辑(如对不可信输入调用unserialize),须禁用危险调用、启用白名单校验、关闭session.upload_progress并迁移至PHP 8.2.35+等受支持版本。

PHP 7.4.25 属于已停止支持(EOL)版本,官方**不再提供安全补丁**,因此无法通过升级该版本自身来修复 session 反序列化注入漏洞。但漏洞本身并非直接源于 PHP 7.4.25 的反序列化引擎缺陷,而是由**不安全的业务逻辑**引发——典型如:将不可信的 session 数据(如 $_SESSION、$_COOKIE 或用户可控输入)直接传给 unserialize(),或在 session 处理中误用自定义 session handler 并暴露反序列化入口。
关键:识别并切断反序列化入口
session 反序列化漏洞的本质不是“PHP 自动反序列化 session 就危险”,而是开发者主动调用了 unserialize() 去解析本不该信任的数据。常见高危模式包括:
- 从
$_COOKIE['PHPSESSID']或$_POST['session_data']中提取字符串后直接unserialize() - 使用自定义
SessionHandlerInterface实现,在read()方法里对存储的 session 内容做unserialize(),且未校验来源或格式 - 将用户可控字段(如
$_GET['data'])拼入 session key 后,再从 Redis/Memcached 中取值反序列化
立即可用的缓解措施(无需升级 PHP)
针对 EOL 版本,必须从业务层加固,以下方法经实战验证有效:
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
-
禁用所有不可信输入的 unserialize():搜索代码中所有
unserialize(调用,确认其参数是否来自$_GET、$_POST、$_COOKIE、$_SESSION或外部存储。若来源不可控,一律替换为json_decode()+ 类型校验 -
强制 session 数据白名单校验:若必须反序列化(如兼容旧数据),改用
unserialize($data, ['allowed_classes' => ['WhitelistClass1', 'WhitelistClass2']]),禁止false或空数组 -
关闭危险的 session.save_handler 配置:检查
php.ini中session.serialize_handler是否为php_serialize(默认安全),避免设为php(旧格式易受字符逃逸影响);同时确认session.upload_progress.enabled = Off(该功能在 EOL 版本中已被官方物理禁用补丁覆盖,但需人工确认) -
用 HMAC 签名校验 session 内容完整性:在写入 session 前,计算
hash_hmac('sha256', $serialized_data, $secret_key)并一并存储;读取时先验签,再反序列化。可封装为统一的safe_unserialize()工具函数
终极建议:迁移与替代方案
PHP 7.4 已于 2022 年 11 月终止支持,CVE-2025-49113(Roundcube)、CVE-2026-109618/19(SessionUploadProgress UAF)等新漏洞均不修复。仅靠代码层修补是临时手段:
立即学习“PHP免费学习笔记(深入)”;
- 将 session 存储改为
redis或memcached,并启用serialize_handler = php_serialize(更严格格式) - 全面迁移到受支持版本(如 PHP 8.2.35+、8.3.36+),获取官方 Session 模块的内存级修复
- 用
json_encode()/json_decode()替代所有非必要场景的serialize()/unserialize(),尤其涉及用户输入时


















