
用 Laravel 開發網站時,很多人會安裝 Laravel Debugbar:頁面下方多一條工具列,可以看到這一頁執行了哪些資料庫查詢、花了多少時間、載入了哪些畫面檔案。開發時非常好用,但如果網站上線後它還在,就是一個嚴重的資安問題。
為什麼正式網站一定要關掉?
Debugbar 會把網站內部的資訊直接顯示給任何訪客看,包括:
- 完整的資料庫查詢語法,連同資料表名稱、欄位和查詢的值
- 請求內容、Cookie、Session 資料
- 使用的路由、控制器、畫面檔案的路徑
這些資訊等於幫想攻擊網站的人畫好了地圖。
Debugbar 會出現在正式網站上,根本原因通常是 Laravel 的除錯模式沒有關,也就是 .env 裡的 APP_DEBUG 還是 true。除錯模式開著的時候,網站一出錯就會顯示詳細的錯誤畫面,裡面有程式碼片段、檔案路徑等內部資訊。Laravel 官方文件也明確提醒:正式環境的 APP_DEBUG 一定要是 false,否則可能把敏感的設定值暴露給使用者。過去也發生過除錯模式開著、搭配舊版錯誤頁套件,被遠端執行程式碼的重大漏洞。
方法一:關閉除錯模式(一定要做)
打開專案根目錄的 .env 檔案,確認這兩行:
APP_ENV=production
APP_DEBUG=falseAPP_ENV=production:告訴 Laravel 這是正式環境。APP_DEBUG=false:關閉除錯模式。
Debugbar 預設是跟著 APP_DEBUG 決定要不要啟用的,所以 APP_DEBUG 設成 false,Debugbar 也會一起關閉。
想保留除錯模式,只關 Debugbar
在自己電腦上開發時想看錯誤訊息,但不想看到 Debugbar,可以在 .env 加上:
DEBUGBAR_ENABLED=false這就是這篇文章舊版的做法。但要記住:正式網站不能只靠這一行,APP_DEBUG 還是一定要設成 false。
改了 .env 沒效果?清除設定快取
很多正式網站在部署時會執行 php artisan config:cache,把設定快取起來。有設定快取時,Laravel 不會再讀取 .env 檔案,所以改了 .env 看起來完全沒效果。
修改 .env 之後,重新建立設定快取:
php artisan config:cache不確定有沒有快取的話,也可以先全部清除:
php artisan optimize:clear沒有 SSH、無法執行指令的主機,可以用 FTP 刪除 bootstrap/cache/config.php 這個設定快取檔,Laravel 就會重新讀取 .env。
方法二:從正式環境移除 Debugbar 套件
關閉之後,更徹底的做法是讓正式網站上根本沒有這個套件。
先確認套件是怎麼安裝的
打開專案根目錄的 composer.json,找到 Debugbar 套件的名稱(通常是 barryvdh/laravel-debugbar,以 composer.json 裡實際寫的為準),看它放在 require 還是 require-dev 區塊。
套件在 require-dev 裡(建議的安裝方式)
require-dev 裡的套件只給開發環境使用。正式環境部署時,用下面的指令安裝套件,就會跳過所有開發用的套件:
composer install --no-dev --optimize-autoloader套件在 require 裡
代表當初安裝時沒有加 --dev,正式環境也會安裝到。先移除;本機開發還想使用的話,再改成開發用套件重新安裝:
composer remove barryvdh/laravel-debugbar
composer require barryvdh/laravel-debugbar --dev之後正式環境一樣用上面 --no-dev 的指令部署。
移除前後要檢查的地方
- 程式碼裡的呼叫:搜尋專案裡有沒有
Debugbar::或debugbar(),這些呼叫要先刪掉,不然套件移除後網站會出錯。 - 手動註冊的設定:新版 Laravel 會自動載入套件,不需要手動設定;但比較舊的專案可能在
config/app.php的 providers、aliases 裡手動加過 Debugbar,要一併刪掉(Laravel 11 之後,服務提供者改列在bootstrap/providers.php)。 - 設定檔:如果發布過設定檔,可以刪除
config/debugbar.php。 - 紀錄檔:Debugbar 會把請求的資料存在
storage/debugbar資料夾,可以整個刪除。 - 最後執行一次
php artisan optimize:clear,清掉舊的快取;正式環境再重新執行php artisan config:cache。
上線前檢查清單
.env裡是APP_ENV=production、APP_DEBUG=false。- 修改
.env之後,重新執行過php artisan config:cache。 - 用無痕視窗打開網站,頁面下方沒有 Debugbar;按 Ctrl + U 檢視原始碼,搜尋
debugbar也找不到相關的程式。 - 網域指向的資料夾(網站根目錄)要設定在專案的
public資料夾,而不是專案根目錄,否則.env可能被人直接下載。主機無法修改網站根目錄時,至少要用.htaccess擋掉點開頭的檔案,寫法請看.htaccess 用法大全裡「保護隱藏檔」的段落。
延伸閱讀
- .htaccess 用法大全:轉址、HTTPS、安全防護、壓縮與快取常用設定(WordPress 適用)
- Gmail API 怎麼申請?Google Cloud 建立 OAuth 2.0 用戶端的步驟教學
網站上線前的設定檢查,往往比開發新功能更容易被忽略,卻直接關係到網站安全。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與網站維護託管,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。