可不升级不打补丁堵住ThinkPHP 3.2高危漏洞,通过入口拦截、配置收紧、目录隔离三层防御,关闭调试模式、禁止日志访问、限制Runtime权限并拦截高危路由。

不升级、不打补丁,也能有效堵住ThinkPHP 3.2老版本的高危漏洞。关键在于“入口拦截+配置收紧+目录隔离”三层防御,所有操作都不动框架源码、不改业务逻辑,上线即生效。
关闭调试模式并锁死日志访问
APP_DEBUG=true 是绝大多数RCE和信息泄露的起点。必须确认 Application/Common/Conf/config.php(或入口同级 Conf/config.php)中 'APP_DEBUG' => false 已全局生效;若存在模块级覆盖配置,需全项目搜索并统一设为 false。同时立即在 Web 服务器层禁止访问 Runtime/Logs/ 目录:Nginx 加 location ^~ /Runtime/Logs/ { deny all; },Apache 用 .htaccess 写 Deny from all。清空现有日志,并确保 Runtime 目录仅运行用户(如 www-data)可写,其他用户无读权限。
在入口文件拦截高危路由与参数
所有攻击都从 index.php 开始。在
- 拦截 _method:if (isset($_GET['_method']) && preg_match('/[$`~-]|(think|call_user_func|eval|assert|system|shell_exec)/i', $_GET['_method'])) { die('Access denied'); }
- 拦截 s 参数:if (isset($_GET['s']) && preg_match('/[\\\.\$\{\}|%00]|(invokefunction|call_user_func)/i', $_GET['s'])) { die('Access denied'); }
- 对 m=、c=、a= 等传统参数也做白名单限制:只允许字母、下划线,拒绝点号、双冒号、反斜杠等
禁用危险函数与缓存驱动
从 PHP 运行环境层面切断 RCE 能力链:
立即学习“PHP免费学习笔记(深入)”;
- 编辑 php.ini,在 disable_functions 后追加:exec,passthru,shell_exec,system,proc_open,popen,curl_exec,pcntl_exec,重启 PHP-FPM
- 在 config.php 中强制关闭风险缓存:'DATA_CACHE_TYPE' => 'Apc'(或 'Redis'),禁用 File 驱动;同时设 'TMPL_CACHE_ON' => false 和 'DB_FIELD_CACHE' => false
- 清空 Runtime/Temp/ 目录,并设置该目录在操作系统层不可执行(Linux 下用 chmod -x Runtime/Temp)
加固数据库查询与模板输出
SQL注入和模板注入往往源于输入未校验:
- 所有使用 I() 获取的参数,必须显式指定类型:如 I('get.id/d') 强转整型、I('post.name/s') 强转字符串,禁用裸 I('post.xxx')
- where() 中避免 array('exp', ...) 用法;动态条件一律先类型判断再拼接,例如 $map['id'] = (int)$_GET['id']
- 视图层所有变量输出前加 htmlspecialchars(),禁用 ${@xxx} 类模板语法;模板文件路径不得由用户参数拼接,防止目录遍历



















