最根本修复方式是升级至ThinkPHP 6.1+或仍在支持周期内的5.1.x;若强依赖5.0系列,须设'url_route_must'=>true、禁用危险模板功能、过滤用户输入并前置拦截敏感特征。

ThinkPHP 5.0.25 模板注入漏洞(常与未强制路由导致的 RCE 关联)本质是控制器名未校验、模板变量未经过滤直接参与解析,攻击者可构造恶意请求调用 think\app::invokeFunction 或通过 {\$a} 类模板语法触发 PHP 代码执行。修复不能只靠补丁或单点过滤,需分层落实。
升级到安全版本
官方已明确停止对 5.0.x 系列的维护,5.0.25 属于高危废弃版本。最根本的修复方式是升级至 ThinkPHP 6.1+ 或至少迁移至仍在支持周期内的 5.1.x(需确认是否已同步修复相关路由与模板逻辑)。若业务强依赖 5.0 系列,应严格限定为 5.0.24 及以下(但仍有风险),且必须配合后续加固措施。
关闭未强制路由模式
该漏洞在 'url_route_must' => false(默认值)时才可被利用。立即在 config/app.php 中设置:
'url_route_must' => true- 同时确保所有访问入口都通过定义好的路由规则,禁用
?s=这类动态控制器调用方式
禁用危险模板功能与变量输出
在模板中避免使用未经处理的用户输入作为变量名或表达式:
- 禁用
{\$var|function}中的任意函数调用,将default_filter设为空数组或仅保留htmlspecialchars - 禁用模板引擎的
extend、include和php标签,在config/template.php中设置:'taglib_build_in' => 'cx',移除php标签支持 - 对所有可能进入模板的用户数据(如
Request::param()、input())做白名单过滤,禁止传入含__、invoke、call_user_func等关键字的键名
Web 层前置拦截关键攻击特征
在 Nginx/Apache 配置或 WAF 规则中主动阻断典型利用路径:
- 拦截 URL 中包含
?s=index/think\app/invokefunction、?s=captcha后接_method=__construct等组合参数 - 拦截请求体或查询参数中出现
call_user_func_array、system、exec、eval、assert等敏感函数名(注意大小写与编码绕过) - 限制
GET请求中s=参数长度不超过 32 字符,控制器名仅允许字母、数字、下划线
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











