0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

關閉與移除 Laravel Debugbar:正式網站一定要設定 APP_DEBUG=false

wordpress 恢復舊版 小工具 Classic Widgets 恢復舊版編輯器 disable Gutenberg 禁用古騰堡

用 Laravel 開發網站時,很多人會安裝 Laravel Debugbar:頁面下方多一條工具列,可以看到這一頁執行了哪些資料庫查詢、花了多少時間、載入了哪些畫面檔案。開發時非常好用,但如果網站上線後它還在,就是一個嚴重的資安問題。

為什麼正式網站一定要關掉?

Debugbar 會把網站內部的資訊直接顯示給任何訪客看,包括:

  • 完整的資料庫查詢語法,連同資料表名稱、欄位和查詢的值
  • 請求內容、Cookie、Session 資料
  • 使用的路由、控制器、畫面檔案的路徑

這些資訊等於幫想攻擊網站的人畫好了地圖。

Debugbar 會出現在正式網站上,根本原因通常是 Laravel 的除錯模式沒有關,也就是 .env 裡的 APP_DEBUG 還是 true。除錯模式開著的時候,網站一出錯就會顯示詳細的錯誤畫面,裡面有程式碼片段、檔案路徑等內部資訊。Laravel 官方文件也明確提醒:正式環境的 APP_DEBUG 一定要是 false,否則可能把敏感的設定值暴露給使用者。過去也發生過除錯模式開著、搭配舊版錯誤頁套件,被遠端執行程式碼的重大漏洞。

方法一:關閉除錯模式(一定要做)

打開專案根目錄的 .env 檔案,確認這兩行:

INI / php.ini
APP_ENV=production
APP_DEBUG=false
  • APP_ENV=production:告訴 Laravel 這是正式環境。
  • APP_DEBUG=false:關閉除錯模式。

Debugbar 預設是跟著 APP_DEBUG 決定要不要啟用的,所以 APP_DEBUG 設成 false,Debugbar 也會一起關閉。

想保留除錯模式,只關 Debugbar

在自己電腦上開發時想看錯誤訊息,但不想看到 Debugbar,可以在 .env 加上:

INI / php.ini
DEBUGBAR_ENABLED=false

這就是這篇文章舊版的做法。但要記住:正式網站不能只靠這一行,APP_DEBUG 還是一定要設成 false。

改了 .env 沒效果?清除設定快取

很多正式網站在部署時會執行 php artisan config:cache,把設定快取起來。有設定快取時,Laravel 不會再讀取 .env 檔案,所以改了 .env 看起來完全沒效果。

修改 .env 之後,重新建立設定快取:

Shell / 終端機
php artisan config:cache

不確定有沒有快取的話,也可以先全部清除:

Shell / 終端機
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 裡的套件只給開發環境使用。正式環境部署時,用下面的指令安裝套件,就會跳過所有開發用的套件:

Shell / 終端機
composer install --no-dev --optimize-autoloader

套件在 require 裡

代表當初安裝時沒有加 --dev,正式環境也會安裝到。先移除;本機開發還想使用的話,再改成開發用套件重新安裝:

Shell / 終端機
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 用法大全裡「保護隱藏檔」的段落。

延伸閱讀

網站上線前的設定檢查,往往比開發新功能更容易被忽略,卻直接關係到網站安全。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與網站維護託管,歡迎來聊聊。

分享這篇文章

返回文章列表更多「html網頁語法教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!