ThinkPHP 5.0.24已终止维护,存在HTTP方法伪造、缓存文件包含RCE、反序列化链三大高危漏洞,必须升级至TP6.1 LTS或TP8.x;临时加固需关闭调试、禁访日志、过滤参数、强制路由、输入过滤并禁用危险函数。

ThinkPHP 5.0.24 是一个已确认存在多个高危漏洞的终止维护版本,官方早已停止支持。它不具备长期使用的安全基础,**不能靠“打补丁”实现可靠防护,必须升级或替换**。
立即阻断最易被利用的入口
攻击者通常从调试信息和日志文件入手,这是所有TP5.0.24站点最先暴露的风险点:
- 将 APP_DEBUG 设为 false:在
app.php或extra/debug.php中确认配置项'debug' => false - 清空并锁定日志目录:
runtime/log/下全部内容删除,然后通过 Web 服务器配置禁止直接访问,例如 Nginx 中添加:location ~ ^/runtime/.*\.(log|php)$ { deny all; } - 过滤调试参数:在入口文件
public/index.php开头加入统一拦截逻辑,移除所有含debug、showsql、test的 GET/POST 参数
针对性修复三大核心漏洞
TP5.0.24 的风险不是单一的,而是三类可独立利用的漏洞共存:
-
HTTP 方法伪造(CVE-2018-20062):修改
thinkphp/library/think/Request.php中的method()方法,在解析_method参数后强制校验白名单:in_array($method, ['GET','POST','PUT','DELETE','PATCH']),非法值一律降级为 POST -
缓存文件包含 RCE(CVE-2025-63888):禁止 view() 接收用户可控路径。所有模板调用必须使用固定名称(如
view('index')),严禁拼接变量(如view($user_input))。同时检查config/template.php中是否启用了不安全的layout_on或tpl_deny_func配置 -
反序列化链(Windows::__destruct → Model::__toString → Output::__call):修改
thinkphp/library/think/process/pipes/Windows.php,重写__destruct()和removeFiles(),确保$this->files仅接受字符串数组,对非字符串类型值直接跳过或抛出异常
强化输入与路由控制
这是成本最低、见效最快的第二道防线:
- 开启强制路由:在
route.php中设置'url_route_on' => true,并定义完整路由规则,禁用/:controller/:action类动态匹配 - 所有外部输入必须过滤:GET/POST/COOKIE 值不得直接进入业务逻辑。数值型用
intval()或filter_var($v, FILTER_VALIDATE_INT);字符串先过htmlspecialchars(),再用正则限定允许字符(如用户名只允许字母数字下划线) - 禁用危险函数调用:检查全局配置中是否启用
default_filter,若含eval、assert、system等,必须清除;同时审查所有input()调用,确保filter参数不可由用户输入控制
最终方案是迁移而非修补
TP5.0.24 的漏洞成因深植于框架设计逻辑,修复补丁只能覆盖已知路径,无法杜绝新利用方式。官方已明确建议:
- 优先迁移到 ThinkPHP 6.1 LTS 或 TP8.x,它们默认关闭调试、强制路由、内置参数过滤,并持续接收安全更新
- 若暂无法升级,至少将 PHP 运行环境升级至 7.4+,并启用
disable_functions屏蔽exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec - 在 Web 服务器层加设 WAF 规则,拦截含
_method=__construct、filter[]=、class=、unserialize(等特征的请求

















