不升级也能修复thinkphp5远程代码执行漏洞,关键在于精准拦截request类method参数污染和/think路由解析两个入口:修改request.php的method()函数加入http方法白名单校验并清除污染参数;在config.php中启用url_route_must=true并配置路由deny规则;web服务器层添加nginx/apache规则过滤s=/think、_method=、filter[]=等攻击特征;最后可临时禁用system、exec、call_user_func_array等高危函数。

不升级也能修复ThinkPHP5远程代码执行漏洞,关键在于精准拦截漏洞利用链的两个核心入口:一是Request类method方法的任意方法调用,二是路由层对/think命名空间路径的非法解析。以下措施无需改动业务逻辑,覆盖5.0.x至5.1.31中未升级的常见版本。
封堵Request类method参数污染
漏洞常通过_method=__construct&filter[]=system等参数触发任意方法调用。直接修改thinkphp/library/think/Request.php中的method()函数:
- 定位原函数中处理
$_POST[Config::get('var_method')]的分支 - 在赋值前加入白名单校验:
if (in_array($method, ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])) { ... } - 对非白名单方法强制设为
POST,并unset($_POST[...])清除污染源 - 保存后重启Web服务,该补丁可阻断CVE-2018-1002015及5.0.23-RCE的典型利用链
禁用危险路由解析路径
攻击者常通过?s=index/ hinkconfig/get绕过控制器校验。在application/config.php中强制启用路由约束:
- 设置
'url_route_must' => true,关闭隐式路由匹配 - 若项目依赖动态路由,追加
'route_rule' => ['deny' => ['^/think\\'](注意双反斜杠转义) - 同时检查
route/route.php中是否定义了/thinkpp/invokefunction类通配规则,有则立即删除
Web服务器层临时拦截
在Nginx或Apache配置中添加规则,从请求源头过滤已知攻击特征:
- Nginx示例:
if ($args ~* "(s=.*?/think\\|_method=|filter[]=)") { return 403; } - Apache示例:
RewriteCond %{QUERY_STRING} (s=.*/think\|_method=|filter[]=) [NC] RewriteRule ^ - [F] - 重点拦截
/thinkpp/invokefunction、/thinkconfig/get、vars[0]=等高频payload关键词
禁用高危内置函数(应急兜底)
当无法立即修改代码时,在php.ini中限制函数执行能力:
- 设置
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,pcntl_exec - 补充禁用反射相关函数:
call_user_func_array,call_user_func,assert,eval - 注意:此操作可能影响部分正常功能,需先在测试环境验证
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











