thinkphp文件包含漏洞是多版本共性风险,源于路径参数校验缺失;需禁用多语言功能、杜绝模板层变量覆盖、加固php环境(如allow_url_include=off、删除pearcmd.php)、升级至5.0.24+/5.1.32+/6.0.14+并定期扫描敏感参数。

ThinkPHP文件包含漏洞不是单一问题,而是多个版本中反复出现的共性风险,核心在于框架对用户可控路径参数缺乏校验。修复不能只靠打补丁,得从配置、代码、环境三方面同步收紧。
关闭危险功能:多语言模块是高危入口
QVD-2022-46174等Lang-RCE漏洞直接源于多语言模块的动态加载机制。只要没真实业务需要多语言,就该彻底禁用:
- 在config/app.php中将
'lang_switch_on' => false设为false - 删除或重命名app/lang/目录,避免框架自动扫描
- 检查中间件和路由,移除所有对
think_lang、lang等参数的解析逻辑
堵住模板层变量覆盖漏洞
ThinkPHP 5.0–5.1系列中,$this->assign(request()->get())这类写法会把GET参数直接合并进模板变量,再经extract()触发变量覆盖,最终导致cacheFile等参数被篡改引发文件包含:
- 禁止使用
request()->get()、request()->param()全量赋值,改为显式白名单接收:$this->assign('name', input('name/s')) - 升级到5.0.19+或5.1.32+,这些版本已移除
extract()调用并加固fetch()参数校验 - 模板渲染前强制校验
$template路径,拒绝含../、http://、phar://等危险协议的字符串
加固PHP运行时环境
即使代码层做了过滤,底层配置松动仍可能绕过防御:
- 确认
php.ini中allow_url_include = Off(禁用远程包含) - 设置
open_basedir限制可访问目录范围,例如open_basedir = /var/www/html/:/tmp/ - 删除或重命名服务器上非必要的敏感文件,如
/usr/local/lib/php/pearcmd.php——这是Lang-RCE常用跳板 - 禁用危险函数(可选):
disable_functions = include,include_once,require,require_once,eval,assert(注意不影响框架正常加载)
版本升级与主动检测
官方已在多个版本中修复关键路径:
- ThinkPHP 5.0.x → 升级至5.0.24+
- ThinkPHP 5.1.x → 升级至5.1.32+
- ThinkPHP 6.0.x → 升级至6.0.14+(修复QVD-2022-46174)
- 部署轻量检测脚本,定期扫描是否存在
?lang=、?cacheFile=等敏感参数回显
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











