跳至主要內容
>_ITDITD網站資安平台

名詞解釋

「.env」是什麼 — 環境變數檔案外洩會發生什麼

.env(dot env)是一個設定檔案,用來把資料庫認證、API key、加密金鑰等機密值從應用程式本體中分離出來保存。它很方便,但一旦放進公開目錄,就等於「把一整串鑰匙貼在大門上」。本文用圖和表淺白講解它的含義、為什麼是最危險的檔案、外洩時各種機密分別會發生什麼、正確的存放位置、git 與輪替(rotation)的防護方法,以及自查的方式。

發布於 2026-06-07 更新於 2026-06-07 閱讀時間 1 分鐘

.env 非常方便,幾乎所有現代框架都會用它。但只要存放位置弄錯一處,就等於把網站的一整串鑰匙貼在大門上。本文從零開始講解它的含義和防護方法。

再講細一點

應用程式裡有「隨環境而變的值」和「不想給人看到的值」。比如資料庫密碼、外部服務的 API key、用來加密工作階段的金鑰等。如果把這些直接寫死在原始碼裡,一旦共享程式碼,祕密也會跟著一起外洩。

於是,把這些集中到 .env 這一個檔案裡,程式碼則以「環境變數」的形式讀取它們。Next.js、Laravel、Rails 等許多框架都採用這種方式。

為什麼是「最危險的檔案」

.env 在一個檔案裡匯集了多把鑰匙,所以這裡一旦外洩,損害就會一下子擴散開來。把每把鑰匙「外洩後會發生什麼」並列出來,就能看出有多嚴重。

外洩的值會發生什麼
資料庫認證資訊資料被讀取、竄改、全部刪除
外部 API key被冒名使用、違規扣費
加密金鑰(如 Laravel APP_KEY、簽章金鑰)工作階段偽造、冒名登入
OAuth 機密關聯應用程式被接管

事實上,.env 被公開是事故的經典戲碼。→ .env 曾向全世界公開的故事

外洩的典型模式=存放位置的失誤

最大的原因是「把應用程式本體整個放進公開目錄(docroot)」。本該只暴露 public/,結果卻公開了它的上層目錄,連 .env 都能被取到。

✗ 危險(本體直接放在公開根目錄下)

public_html/
├─ .env   ← 能被讀到!
├─ app/
└─ public/

✓ 安全(本體在外,只公開 public)

app-root/
├─ .env   ← 無法到達
├─ app/
└─ public_html/ → public/
本體放在 docroot 之外,公開的只有 public/。僅此一點,.env 就變得無法到達。

防護方法

1

不要放進公開目錄

應用程式本體放在 docroot 之外,公開的只有 public/ 等。在虛擬主機上的具體步驟見 這篇文章

2

不要提交到 git

.gitignore 裡加入 .env*,只共享把值留空的 .env.example

3

外洩後全部輪替

不只是能確認到的那一個,而要把 .env 裡的鑰匙全部更換。按照已被看到的前提來行動。

4

定期自查

養成確認自己網站上 /.env 是否能被打開的習慣。

自查(僅限你自己擁有的網域)

# 回傳 200 且有正文就說明已公開。403/404 則暫時沒問題
curl -sI https://你的網域/.env | head -1
curl -sI https://你的網域/.git/config | head -1

養成每次發布都做一次這項確認的習慣,就能及早發現存放位置的失誤。

接下來讀

FAQ

Q.env 可以提交到 git 嗎?
A

不可以。務必把 .env 加入 .gitignore。作為替代,只提交把值留空的 .env.example,用來共享「需要哪些 key」。

Q.env 哪怕只外洩了一個,要更換什麼?
A

不僅是能確認到的那一個,而要把 .env 裡的鑰匙全部輪替。優先順序是「外部 API、OAuth 機密 → 加密金鑰 → 郵件 → 資料庫」。按照已被看到的前提來行動才安全。

Q怎麼確認 .env 是否外洩了?
A

用瀏覽器打開自己網站的 https://你的網域/.env,如果內容被顯示出來,就說明已經公開了(回傳 200 且能看到正文就出事了)。如果沒顯示而是 403/404,那暫時沒問題。