ThinkPHP 3.2.3 反序列化漏洞不可修复,因其架构缺陷、无官方维护及内置不可绕过POP链;唯一安全解法是停用并迁移至TP6.3+或Laravel等现代框架。

ThinkPHP 3.2.3 的反序列化漏洞无法真正修补——它不是某个配置或某行代码能“修好”的问题,而是整个版本架构、核心设计和维护状态决定的不可修复性缺陷。
该版本自2016年12月起已停止维护超9年,所有已知反序列化链(如 Imagick->__destruct → Memcache->__construct → Model->__construct → Mysql)均存在于框架底层类中,且无官方补丁。任何所谓“打补丁”“加过滤”“改入口”的操作,都只是临时掩盖,无法阻断POP链自动触发。
下面分三类说明现实可行路径:
直接停用并迁移是唯一安全解法
立即学习“PHP免费学习笔记(深入)”;
- ThinkPHP 3.2.3 所有反序列化利用链(含 CVE-2018-15257、CVE-2020-10775 等)在2026年仍100%可复现,Vulhub 和 ExploitDB 中最新验证时间是2026年6月;
- 即使禁用
unserialize()调用,框架自身缓存(S())、Session(Memcache/Redis驱动)、日志反解等模块仍内置不可绕过调用; - 迁移建议:升级至 ThinkPHP 6.3+(已默认禁用不安全驱动、支持
allowed_classes白名单、移除S()等危险函数),或切换至 Laravel、Symfony 等持续维护框架。
若因极端原因必须短期过渡,仅限离线环境执行以下硬隔离措施
- 彻底删除
Application/Runtime/目录,并设为 Web 不可访问(Nginx/Apache 层禁止.php.log.dat后缀请求); - 在
index.php开头强制过滤全部输入:array_walk_recursive($_GET, function(&$v) { $v = preg_replace('/[\r\n%0d%0a]/', '', $v); }); array_walk_recursive($_POST, function(&$v) { $v = preg_replace('/[\r\n%0d%0a]/', '', $v); }); - 全局搜索并注释/删除所有
unserialize(、file_get_contents('php://input')、S(、I(等高危调用点,替换为 JSON 交互。
绝对不可信的“伪修复”手段
- 修改
php.ini中unserialize_callback_func:无效,不拦截反序列化本身; - 仅对
$_GET['data']做base64_decode校验:攻击者可绕过任意编码; - 增加
if (is_string($input))判断:PHP 反序列化字符串本身就是字符串; - 依赖
magic_quotes_gpc或addslashes:5.4+ 已废弃,且对对象属性无效。
不复杂但容易忽略:3.2.3 的反序列化风险从来不在“你写了 unserialize”,而在于“框架替你写了且关不掉”。



















