ThinkPHP需升级至5.1.31+等安全版本修复getshell漏洞,通过composer update或require命令升级后,须验证App.php或Url.php中的正则校验及恶意URL拦截效果。

ThinkPHP 用 Composer 升级到安全版本,核心是明确当前版本漏洞情况 + 精准升级对应包 + 验证修复效果。尤其要注意:TP5.0/5.1 存在已知 getshell 漏洞(2018年通报),必须升到官方修复版本(如 TP5.1.31+ 或更高稳定版),而不能停留在旧小版本。
确认当前版本和漏洞风险
先查清你用的是哪个分支和具体版本:
- 运行 composer show topthink/think 或 php think -v 查版本号
- 若显示 5.0.x 或 5.1.0 ~ 5.1.30,就属于受 getshell 漏洞影响的范围
- 查看 composer.json 中
"topthink/think"的约束,比如"^5.1.0"可能仍会锁在不安全的小版本
执行 Composer 升级命令
根据目标版本类型选择操作:
- 升到 TP5 最新安全版(推荐短期过渡):
composer update topthink/think --with-dependencies - 强制指定已修复版本(更稳妥):
composer require topthink/think:5.1.31 --update-with-dependencies - 若想一步到位迁移到 TP6(无兼容性回退):
composer create-project "topthink/think:^6.1.5" tp6-new(需新建项目迁移,非原地升级)
验证是否真正修复
光更新依赖不够,还要确认漏洞入口已被拦截:
- 检查 think\App.php(TP5.0)或 think\route\dispatch\Url.php(TP5.1)中是否有控制器名正则校验逻辑(
preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) - 手动构造恶意 URL 测试,如
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1,应返回 404 而非执行代码 - 运行 php think version 确认输出为 5.1.31 或更高
升级不是改个版本号就完事,关键是让防护逻辑生效。不复杂但容易忽略验证环节。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











