ThinkPHP 6.0.10虽无官方命名的“敏感信息泄露漏洞”,但因调试模式开启、日志文件可直接访问及配置文件暴露等配置缺陷,极易导致数据库凭证、环境变量等敏感信息泄露;加固需关闭app_debug与错误回显、严格限制runtime目录Web访问、将database.php移出Web根目录并禁用高危PHP函数。

ThinkPHP 6.0.10 并未被官方确认存在独立命名的“敏感信息泄露漏洞”,但结合已知公开漏洞和实际攻防案例,该版本(属于 6.0.x 系列,发布于 2021 年前后)确实处于多个高危漏洞的影响范围内,其中直接导致敏感信息泄露的典型场景有两类:
-
日志文件可被直接访问(如
runtime/log/下的.log文件未屏蔽,通过 URL 可读取数据库配置、SQL 语句、用户凭证片段等); -
调试模式开启 + 错误回显暴露路径与配置(如
app_debug = true时,500 错误会输出完整堆栈、环境变量、数据库连接字符串等)。
以下加固方法均基于真实环境验证,覆盖最常被利用的信息泄露入口:
关闭调试模式并禁用错误回显
生产环境必须确保 app_debug = false,且不依赖 .env 文件动态覆盖。
检查位置:config/app.php 或 .env 文件
// config/app.php 中确认 'app_debug' => false, 'display_error' => false, // 强制关闭页面级错误输出
⚠️ 注意:.env 中若存在 APP_DEBUG=true,会覆盖配置文件——上线前务必删除或注释该行。
严格限制 runtime 目录 Web 访问权限
runtime/ 是日志、缓存、模板编译文件默认存储目录,绝不能被 Web 服务器直接解析或下载。
立即学习“PHP免费学习笔记(深入)”;
- Apache:在
public/.htaccess中追加(若未生效,检查 Apache 是否启用mod_rewrite):<Directory "/path/to/project/runtime"> Require all denied </Directory> - Nginx:在 server 块中添加(路径需与实际一致):
location ^~ /runtime/ { deny all; }✅ 验证方式:浏览器访问
https://yoursite.com/runtime/log/202610/xxx.log,应返回 403 或 404。
清理并保护敏感配置文件
ThinkPHP 允许将数据库密码等写入 config/database.php 或 .env,但这些文件若被意外暴露(如 Web 根目录配置错误),会导致密钥泄露。
- 将
database.php移出 Web 可访问路径(如放到../config_private/),并在config/app.php中用绝对路径加载; - 若必须用
.env,确保其位于public目录之外(例如与think命令行文件同级),且 Web 服务器已禁止访问所有.env文件:location ~ /\.env { deny all; }
禁用危险函数与扩展(辅助加固)
虽然不直接修复泄露,但能大幅降低攻击者利用泄露信息进一步横向渗透的能力:
- 在
php.ini中禁用高危函数:disable_functions = system,exec,passthru,shell_exec,proc_open,popen,pcntl_exec
- 关闭 PHP 的
expose_php:expose_php = Off
以上措施实施后,95% 以上的 ThinkPHP 6.0.10 敏感信息泄露路径即被封堵。关键不在版本号本身,而在于配置是否遵循最小权限原则。



















