解決 Vite 專案中 ngrok 連線失敗的「安全門檻」

最近有團隊成員在進行外部對接調試時,反應使用 ngrok 進行內網穿透時,遇到了連線被阻擋的問題。這其實不是 ngrok 的服務異常,而是 Vite 在升級到新版本後,為了防禦 DNS Rebinding(DNS 再綁定攻擊) 所加強的安全檢查機制。

🛠️ 解決方案

如果你的 ngrok 網址顯示攔截,請直接檢查你的 vite.config.ts。你必須顯式地將 ngrok 提供的 domain 加入「允許名單」中:

TypeScript

// vite.config.ts
export default defineConfig({
  server: {
    allowedHosts: [
      'a134-211-72-118-118.ngrok-free.app' // 替換為你當前的 ngrok 網址
    ]
  }
})

 為什麼我們要關注這個設定?

公司治理資安維護的角度來看,這項調整背後有兩個關鍵思考:

  1. 防止 Host Header 攻擊:Vite 預設不再信任隨機的 Host 請求。這能有效避免惡意網站利用瀏覽器漏洞,在使用者不知情的狀況下,與本地開發環境通訊並竊取原始碼或環境變數。

  2. 開發環境的最小權限原則:雖然 ngrok 方便,但隨意開放外部存取內網環境是有風險的。透過 allowedHosts 的明確宣告,我們能確保開發者清楚知道哪些外部網域正在與本地服務互動。

📢技術小提醒

在測試結束後,記得將該設定移除或將其移至 .env 進行管理,切勿將特定 ngrok 網址永久硬編碼在 code 中並推上主分支,保持乾淨且安全的 Repo 是每一位資深工程師的素養。

祝大家今天開發順利,Bug 自由!

#Vite #ngrok #FrontendDevelopment #資安意識 #DNSRebinding #軟體研發管理 #WebSecurity #TypeScript

作者: 林壽山

目前任職於軟體公司研究開發部門,擔任專業處長,專注於.NET C# 開發,並具備豐富的POS 收銀系統與金流整合開發經驗。我精通各類支付系統的設計與開發,包含第三方支付(如綠界、藍新、歐付寶、速買配、馬來西亞 ePay/HappyPay、台新 One 碼)、行動支付(悠遊卡、一卡通、支付寶、微信支付、街口支付)、以及信用卡支付(聯合信用卡)。 熟悉多種開發技術,擅長PHP 網頁開發(CodeIgniter、Laravel 框架)、Delphi 程式設計、資料庫設計、C# WinForm/WebForm 應用開發、ASP.NET MVC、API 串接設計,並具備LINE 串接開發的豐富經驗。 除了技術開發之外,我也熱衷於技術分享,曾擔任台中學校產業學院講師 5 年,培育新一代的軟體開發人才,致力於推動軟體技術的應用與創新。 我對技術充滿熱忱,始終保持學習與探索的心態,期望透過軟體開發為企業與社會創造更大的價值。