必须立刻升级至TP8.0+——TP5.1.41自2021年起停止维护,存在反序列化RCE、控制器绕过RCE、SQL注入等高危漏洞且无补丁;入口文件拦截、禁用危险函数、参数过滤仅为临时缓解,升级才是唯一根本解决方案。

必须立刻修复——TP5.1.41已停止维护近三年,所有已知RCE漏洞均无官方补丁,不是“修不修”的问题,而是“还敢不敢用”的问题。
紧急拦截高危请求参数
在入口文件 public/index.php 顶部(require __DIR__ . '/../thinkphp/start.php'; 前)插入以下防御逻辑:
$dangerous = [
'\think\', 'call_user_func', 'call_user_func_array', 'eval', 'assert',
'system', 'exec', 'shell_exec', 'passthru', 'pcntl_exec', '${@',
'invokefunction', 'method=__construct', 'filter=system', '_method=__construct'
];
foreach ($_GET as $k => $v) {
if (is_string($v) && preg_match('/(' . implode('|', $dangerous) . ')/i', $v)) {
http_response_code(403);
exit('Forbidden');
}
}
foreach ($_POST as $k => $v) {
if (is_string($v) && preg_match('/(' . implode('|', $dangerous) . ')/i', $v)) {
http_response_code(403);
exit('Forbidden');
}
}
该规则覆盖主流 RCE 利用特征:控制器绕过(s=index/ hinkpp/invokefunction)、构造方法变量覆盖(_method=__construct&filter=system)、反序列化触发点(${@eval()等。
全局禁用危险函数调用
搜索全项目代码,彻底清除以下高危写法:
-
eval(、assert(、create_function(—— 全部替换为配置驱动或白名单函数映射 -
call_user_func(、call_user_func_array(直接调用用户输入的场景 —— 改为固定方法名+参数校验,例如:in_array($method, ['sendEmail', 'logAction']) ? $this->$method($data) : throw new Exception('Invalid method'); -
unserialize($_GET['a'])、unserialize($_POST['data'])—— 强制改用json_decode(),或启用 PHP 的allowed_classes = false配置
加固路由与参数解析层
在 application/common.php 或中间件中添加路由参数过滤:
// 禁止 URL 中出现 think 命名空间路径
if (isset($_GET['s']) && is_string($_GET['s'])) {
if (preg_match('/\\think\\/i', $_GET['s'])) {
abort(403, 'Route blocked');
}
}
// 拦截非法 order/group 参数(防 SQL 注入+RCE 串联)
if (isset($_GET['order']) && !preg_match('/^[a-zA-Z_][a-zA-Z0-9_,\s]*$/', $_GET['order'])) {
abort(400, 'Invalid order parameter');
}
尤其注意:TP5.1 对 order()、group() 等方法不做自动过滤,攻击者可注入 updatexml(1,concat(0x7e,user()),1) 或拼接系统命令执行链。
升级是最根本的防御
TP5.1.41 不是“旧”,而是“已废弃靶机”。当前唯一可靠方案是升级至 TP8.x:
- TP8.0+ 内置原生路由白名单、控制器方法签名验证、模板沙箱机制
- 完全兼容 PHP 8.2–8.4,消除因版本错配引发的反序列化歧义
- 迁移成本可控:官方提供
tp-upgrade工具自动转换路由定义、模型语法和中间件结构
若短期无法升级,至少将 PHP 运行环境限制在 PHP 7.4.33+ 并关闭 allow_url_include、display_errors、magic_quotes_gpc(虽已废弃但部分老环境仍开启)。

















