TP5 如何修复反序列化漏洞升级补丁

文章导读
修复 ThinkPHP 5 反序列化漏洞最稳妥的办法是升级到官方发布的最新安全版本。如果业务无法立即通过 Composer 升级,则需要手动替换核心框架目录或应用官方提供的安全补丁文件,并严格限制控制器访问。
📋 目录
  1. A Composer 升级方案
  2. B 手动补丁应用步骤
  3. C 漏洞验证方法
  4. D 常见坑与排查
  5. E 参考来源
A A

修复 ThinkPHP 5 反序列化漏洞最稳妥的办法是升级到官方发布的最新安全版本。如果业务无法立即通过 Composer 升级,则需要手动替换核心框架目录或应用官方提供的安全补丁文件,并严格限制控制器访问。

先说结论:官方已发布多个安全版本修复已知风险,优先通过包管理工具升级核心框架,无法升级时再考虑手动修补。

  • 先判断:确认当前项目使用的 ThinkPHP 具体版本号及是否修改过核心文件
  • 优先做:通过 Composer 升级到 5.x 系列的最新维护版本或迁移至 6.x/8.x
  • 再验证:检查版本号文件并使用安全扫描工具确认漏洞是否消除

Composer 升级方案

如果项目使用 Composer 管理依赖,请修正包名为 topthink/framework(注意中间无横杠),并在项目根目录执行以下命令。

1. 升级至 5.1 系列最新维护版本

修改 composer.json 中的版本约束,或直接使用 require 命令指定版本:

composer require topthink/framework:5.1.*

2. 更新依赖

如果已修改配置文件,执行更新命令:

composer update topthink/framework

3. 配置示例

确保 composer.json 中包含正确的依赖配置:

TP5 如何修复反序列化漏洞升级补丁
{
    "require": {
        "topthink/framework": "^5.1"
    }
}

手动补丁应用步骤

若服务器无法连接 Composer 仓库或业务锁定旧版本,可采用手动替换核心文件的方式。

1. 备份当前代码

在进行任何升级或修改前,务必对当前代码目录和数据库进行完整备份,以便出现问题时回滚。

2. 下载官方修复版本

访问 ThinkPHP 官方 GitHub 仓库,下载对应系列(如 5.1.x)的最新 Release 包。不要直接下载 master 分支,请选择带有 Release Tag 的稳定版本。

3. 替换核心目录

将下载包中的 thinkphp 目录覆盖项目中的同名目录。注意:不要覆盖项目的 applicationconfigpublic 目录,仅替换框架核心。

TP5 如何修复反序列化漏洞升级补丁

4. 关键文件检查(如需手动修改)

如果无法替换整个目录,需重点检查 thinkphp/library/think/Request.php。历史漏洞多源于此处对输入变量的过滤缺陷。官方修复方案通常涉及增加对反序列化数据的严格过滤。建议直接对比官方修复版本的该文件差异,将过滤逻辑同步到当前文件,而非自行编写过滤规则。

漏洞验证方法

升级或补丁应用后,需通过以下方法验证修复是否生效。

1. 版本号检查

查看项目根目录或 vendor 目录下的版本文件,通常是 thinkphp/base.php。确认 THINK_VERSION 常量已变更为官方最新的安全版本。

cat thinkphp/base.php | grep THINK_VERSION

2. 配置检查

确保 config.php 中未开启不必要的调试模式,生产环境应关闭 app_debug。部分补丁需要配合配置调整才能生效。

'app_debug' => false,

3. 安全行为测试

TP5 如何修复反序列化漏洞升级补丁

在测试环境中,尝试发送包含特殊构造参数的请求。修复后的版本应拒绝执行恶意序列化数据,通常表现为返回标准错误页面而非执行代码或抛出敏感堆栈信息。可使用常见的 Web 漏洞扫描工具对目标 URL 进行扫描,观察是否还能检测到 ThinkPHP 远程代码执行漏洞。

常见坑与排查

1. 核心文件被篡改

如果之前为了修复漏洞手动修改过 Request.php 等核心文件,Composer 升级可能会覆盖这些修改,或者手动修改未覆盖到所有漏洞点。建议直接升级官方完整核心。

2. 缓存未清除

升级后如果网站表现异常,尝试清除 runtime 目录下的缓存文件。OPcache 等 PHP 缓存也可能导致旧代码依然生效,必要时重启 PHP 服务。

rm -rf runtime/*
service php-fpm restart

3. 依赖冲突

升级框架核心可能导致部分第三方扩展不兼容。升级前请在测试环境验证业务功能是否正常,特别是涉及模型操作和请求绑定的功能。

参考来源

  • ThinkPHP 官方 GitHub 仓库:https://github.com/top-think/framework
  • ThinkPHP 官方网站:https://www.thinkphp.cn