上线前必须关闭 Laravel 的 Debug 模式并设 APP_ENV=production,否则会暴露数据库密码等敏感信息;需修改 .env 文件、清空并重建配置缓存,并禁止 Web 服务器访问 /bootstrap/cache 目录。

上线前必须关闭 Laravel 的 Debug 模式,否则访问任意错误路由都会直接暴露数据库密码、文件路径、SQL 原文和完整堆栈,攻击者三分钟内就能摸清你的服务器结构和密钥位置。
修改 .env 配置
打开项目根目录下的 .env 文件,找到 APP_DEBUG=true 这一行,将其改为 APP_DEBUG=false。
同时检查 APP_ENV 是否为 production,如果不是,请一并改为 APP_ENV=production。这一步不能省——仅设 APP_DEBUG=false 而不设 APP_ENV=production,中间件组、日志策略和缓存行为仍可能按开发环境执行。
清除并重建配置缓存
执行以下命令清空旧缓存:php artisan config:clear。
再运行:php artisan config:cache。这会把所有配置合并写入 bootstrap/cache/config.php,避免每次请求都重复读取多个文件。
注意:如果 Nginx 或 Apache 未禁止访问 /bootstrap/cache 路径,攻击者可直接下载该文件拿到全部配置(含数据库凭证)。需在 Web 服务器配置中添加 location ^~ /bootstrap/cache { return 403; }。
验证是否生效
方法一:手动触发一个 500 错误
访问一个不存在的路由(如 /debug-test-abc123),浏览器应返回简洁的 404 或 500 页面,页面中不能出现 “Whoops” 字样、堆栈跟踪、vendor/ 路径、SQL 查询或 $_ENV 变量列表。
方法二:检查日志输出行为
在控制器中故意抛出异常:throw new Exception('test debug off');,刷新页面后确认 storage/logs/laravel.log 中有记录,但浏览器端无任何敏感信息输出。
方法三:终端快速校验
运行 php artisan tinker → 输入 config('app.debug') → 回车,返回值必须是 false。


















