ThinkPHP 5.0.x和5.1.x早期版本存在多个RCE漏洞(如CVE-2018-20063、CVE-2019-9744、CVE-2020-10787),官方已停止维护;应升级至6.x或8.x,若暂无法升级需关闭调试模式、限制敏感目录访问并严格校验用户输入。

ThinkPHP 5.0.x 和 5.1.x 早期版本存在多个已公开的安全漏洞,其中最典型的是 远程代码执行(RCE)漏洞,主要集中在 2018–2020 年间披露的几个关键 CVE:
-
CVE-2018-20063(ThinkPHP 5.0.23 及更早):利用控制器名参数未严格过滤,可触发
method_exists+call_user_func_array导致 RCE。 - CVE-2019-9744(ThinkPHP 5.0.24–5.0.27、5.1.31–5.1.34):路由解析逻辑缺陷,配合特定 URL 构造可绕过检测执行任意方法。
-
CVE-2020-10787(ThinkPHP 5.0.23–5.0.24、5.1.31–5.1.35):
input()函数在处理php://input等伪协议时未做限制,结合反序列化点可能触发攻击。
重点提醒:
- ThinkPHP 5.0 官方已于 2020 年底停止维护,不再接收安全更新;
- ThinkPHP 5.1 自 2022 年起也已结束生命周期(EOL),官方明确不推荐继续使用;
- ThinkPHP 6.x(当前稳定主线)和 8.x(2023 年起逐步推广)已修复上述问题,并引入默认输入过滤、沙箱模式、强制路由白名单等机制。
如何快速判断自己是否受影响
- 查看项目根目录 `composer.json` 中 `"topthink/framework"` 的版本号; - 运行 php think version(需有命令行权限); - 若显示为 `v5.0.*` 或 `v5.1.*` 且低于以下安全基线,建议立即升级: - 5.0 系列:≥ v5.0.24(仅临时缓解,不推荐长期使用); - 5.1 系列:≥ v5.1.39(最后一个带补丁的维护版)。
升级不是“换版本号”,而是要重适配
ThinkPHP 6+ 与 5.x 存在架构级差异,不能直接替换框架包: - 路由定义方式从闭包/字符串改为类方法注解或配置数组; - 中间件注册、事件绑定、数据库查询语法均有调整; - 模板引擎默认切换为 ThinkTemplate 3.x,不兼容 `{:func()}` 等旧写法; - 日志、缓存、队列等组件需按新规范重配置。
如果暂时无法升级,必须做的防护动作
- 关闭调试模式(APP_DEBUG = false),避免错误信息泄露路径和配置; - 在 Web 服务器层(Nginx/Apache)限制对 `runtime/`、`config/`、`vendor/` 目录的直接访问; - 删除 `public/router.php` 备份文件、`.git` 目录、`composer.lock` 以外的开发残留; - 对所有用户输入(尤其是 `$_GET['s']`、`$_POST['callback']`、`input('param')`)做白名单校验,禁用 `eval`、`assert`、`call_user_func` 等危险函数(可通过 `disable_functions` 配置)。
ThinkPHP 本身是成熟框架,风险主要来自旧版本停更 + 开发者疏于更新 + 输入处理不当。选对版本只是起点,关键还在运行时的配置和编码习惯。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











