ThinkPHP 6.0.14是修复版本,非漏洞版本;CVE-2022-38352等漏洞已在该版本修复,需确认实际运行版本≥6.0.14,并排查残留不安全配置、lang参数路径遍历及用户输入拼接include等风险。

ThinkPHP 6.0.14 本身不是漏洞版本,而是官方发布的修复版本。所谓“修复 6.0.14 之前的文件包含漏洞”,实际是指针对 6.0.0 至 6.0.13 中存在的多语言参数(lang)路径遍历导致的文件包含风险(如 CVE-2022-xxxxx 类路径穿越),以及部分项目中因不当使用用户输入引发的 LFI 问题。修复关键不在打补丁,而在于升级 + 配置清理 + 代码加固三步并行。
确认并升级到安全基线版本
必须确保真实运行版本 ≥ 6.0.14:
- 执行
php think version或检查vendor/topthink/framework/composer.json中的"version"字段,确认非低版本伪装 - 若低于 6.0.14,立即执行:
composer require topthink/framework:^6.0.14 - 升级后清空 runtime 缓存:
php think clear,避免旧缓存干扰
禁用或重构多语言动态切换功能
多数国内项目并不需要通过 URL 参数(如 ?lang=zh-cn)实时切换语言,这是风险主要来源:
- 打开
config/lang.php,设'switch' => false(即使已升级,此配置不生效仍可能触发旧逻辑) - 检查
app/middleware.php,移除或注释掉这一行:\think\middleware\LoadLangPack::class - 删除或重命名
app/lang/目录,消除攻击者尝试读取语言包的路径基础 - 搜索全项目代码,确认无
input('lang')、Lang::setLangSet(...)等手动加载逻辑
严格校验所有用户输入参与的文件路径
框架修复只覆盖其自身中间件,但开发者若在控制器、命令行或自定义中间件中拼接路径,风险依旧存在:
- 禁止直接将
input('file')、input('template')等用于include、require、file_get_contents - 若业务必须支持动态路径,务必做双重防护:
① 用basename($input)提取纯文件名,剥离路径符号
② 拼接后调用realpath(),再比对是否落在合法目录内,例如:if (!$target || strpos($target, realpath(config('view.path'))) !== 0) { throw new HttpException(400); } - 前端 URL 中硬编码的
?lang=参数也应清理,避免被扫描器误判或诱导测试
同步检查 PHP 运行环境基础安全
ThinkPHP 的安全机制依赖底层 PHP 行为正常:
- 确认所用 PHP 版本不在高危范围内:需 ≥
8.2.35、8.3.36、8.4.27或8.5.12(参考 CNVD-2026-41674 / CVE-2026-109618) - 检查宝塔或 Nginx 的 PHP 设置,确保未禁用
scandir、putenv、ini_set等 TP6 必需函数 - 验证
fastcgi_param PATH_INFO在 Nginx 配置中未被注释,否则 TP6 路由初始化失败,可能间接暴露异常行为
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











