ThinkPHP 5.0.28 是不存在的版本,5.0 系列最终版为 5.0.24;漏洞源于路由未强制、控制器名校验缺失及 filter/function 参数无白名单限制,需升级至 5.0.24 或 5.1.31+,并配合路由强制、参数过滤与危险函数禁用等措施修复。

ThinkPHP 5.0.28 不在官方修复版本列表中,它属于 5.0.x 的受影响范围(已知漏洞版本下限为 5.0.0,上限为 5.0.22),因此 5.0.28 是一个不存在的版本号——ThinkPHP 5.0 系列最后一个正式版是 5.0.24(发布于2018年),而关键修复版为 5.0.23。
你提到的“5.0.28”大概率是笔误或混淆(例如将 5.1.28 误写为 5.0.28,或受某些非官方打包版误导)。我们按实际影响逻辑来厘清并给出可操作的修补方案:
ThinkPHP 5.0 远程命令执行漏洞(白名单绕过类)的本质问题
该漏洞核心在于:
- 路由未开启强制模式(
'url_route_must' => false,即默认配置); - 控制器名未被严格校验,允许传入
hinkpp/invokefunction等内部类方法路径; -
input、invokefunction等方法对filter/function参数未做白名单限制,导致phpinfo、system、call_user_func_array等危险函数可被直接调用。
所谓“白名单绕过”,是指即便项目自行加了简单过滤(如禁用 system 字符串),攻击者仍可通过:
- 方法链跳转(如
input→filter→call_user_func_array→system) - 编码混淆(URL编码、大小写混用、反斜杠/正斜杠混用)
- 利用未被纳入白名单的中间函数(如
file_put_contents写 shell)
正确修补方式(分优先级)
升级到官方修复版本
✅ ThinkPHP 5.0 用户必须升级至 5.0.24(含 5.0.23 的全部补丁,且为 5.0 系列最终版)
✅ ThinkPHP 5.1 用户必须升级至 5.1.31 或更高(如 5.1.40+)
⚠️ 不要停留在 5.0.28(该版本不存在)、5.1.29、5.1.30 等中间版本——它们仍存在 RCE 风险。-
临时缓解(仅限无法立即升级的生产环境)
- 强制开启路由检测:在
config/route.php中设置'url_route_must' => true,
- 关闭多模块访问(防止
s=index/ hink...类路径解析):'url_multi' => false,
- 在入口文件
public/index.php顶部增加参数过滤(示例):if (isset($_GET['s']) && preg_match('/\\|/think\\|/think\//i', $_GET['s'])) { die('Access Denied'); } - 禁用危险函数(
php.ini):disable_functions = system,exec,passthru,shell_exec,proc_open,popen,pcntl_exec
- 强制开启路由检测:在
-
代码层加固(推荐长期采用)
- 避免在控制器方法中直接使用用户输入作为
filter、function、callback参数; - 使用白名单显式声明允许的回调函数,例如:
$allowed_filters = ['htmlspecialchars', 'addslashes', 'trim']; if (!in_array($filter, $allowed_filters)) { throw new Exception('Illegal filter'); } - 对所有
input()调用启用默认过滤,避免裸用input('param', '', 'htmlspecialchars')。
- 避免在控制器方法中直接使用用户输入作为
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











