開發與網路

Environment Variables 環境變數是什麼?藏秘密的保險箱檔案

Environment Variables 環境變數,是一組在程式執行時由系統提供給應用程式使用的鍵值對。實務上會寫在一個叫 .env 的隱藏檔案裡,用來存放 API 金鑰、資料庫密碼這類機密。這樣同一份程式碼在開發、測試、正式環境可以用不同的值,而秘密不會被上傳。
Environment Variables 環境變數是什麼?藏秘密的保險箱檔案:文章重點卡

Environment Variables 環境變數是什麼?藏秘密的保險箱檔案

把 API 金鑰直接寫在程式碼裡,是新手最常犯、代價也最貴的錯。程式碼一旦上傳到公開平台,所有人都看得到你的秘密。

解法很成熟:把秘密寫在一個叫 .env 的隱藏檔案裡,讓程式去讀。這一招學會,你的專案就從危險變安全。

你將學到什麼

定義

程式執行時由系統提供的鍵值對,用來存放金鑰、密碼與各環境的設定值。

白話比喻

像一個保險箱檔案。程式碼可以公開,保險箱裡的東西不公開。

跟誰容易搞混

跟寫死在程式碼裡相對。寫死叫 Hardcoding,是資安災難的起點。

定義

環境變數是一組鍵值對,在程式執行時由系統提供給應用程式使用。它可以根據不同環境設定不同的值,開發一組、測試一組、正式一組,程式碼本身完全不用改。

實務上會把這些鍵值對寫在專案根目錄的 .env 檔案裡,例如 AI 服務金鑰、資料庫連線字串、加密金鑰、郵件服務金鑰與專案網址。

一句話記住原則:程式碼可以公開,你的秘密不要公開。

白話比喻

把它想成藏秘密的保險箱檔案。房子可以帶人參觀,保險箱不打開。程式碼是房子,.env 是保險箱。

錯誤示範是把金鑰與密碼直接寫在程式檔案裡,這叫 Hardcoding。程式碼一旦上傳到公開平台,所有人都看得到你的秘密,別人可以拿你的金鑰去用,帳單卻算在你頭上。

寫死在程式碼跟放在 .env 差在哪?

比較點寫死在程式碼裡放在 .env 檔案中
秘密會不會外洩會,上傳就全公開不會,檔案不進版本控制
切換環境要改程式碼改設定值即可
更換金鑰要找出每一處引用改一個地方就好
團隊協作秘密散落在各檔案集中管理,好交接
風險等級高,是典型的資安災難低,屬於標準做法

實際用例

最佳實踐有五條:絕不把秘密寫在程式碼裡、使用 .env 存放敏感資訊、把 .env 加進 .gitignore 避免被上傳、不同環境使用不同設定、定期更換金鑰與秘密降低風險。

讀取方式依語言而異。Node 生態安裝 dotenv 套件後載入,再從執行環境取值;Python 安裝 python-dotenv 後載入,再用取環境變數的方式讀出來。兩邊的概念完全一樣。

你保管的通常是 API Key 這類長期有效的憑證,一旦外流別人就能直接用。所以「不要寫進程式碼」不是講究,是底線。

常見誤解第一個誤解是以為建了 .env 就安全了,忘記加進 .gitignore,結果照樣被推上遠端倉庫。第二個是把 .env 直接貼在聊天室或工單裡傳給同事,那等於把保險箱內容公開一次,正確做法是走金鑰管理工具或私密管道。
本文源起本文內容出自酒Ann 的「AI 實戰陪跑班」課程教材,由酒Ann 編寫成彙編條目。想系統性搞懂 AI 名詞,歡迎追蹤 酒Ann 的 Facebook

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

.env 檔案要放在哪裡?
檔名一定是 .env,開頭有一個點,通常放在專案的根目錄。常見框架都能讀這個檔案,Node 生態用 dotenv 套件載入,Python 用 python-dotenv 載入後以環境變數的方式取值。
有了 .env 就一定安全嗎?
不一定,還要把 .env 加進 .gitignore,版本控制才不會把它推上遠端倉庫。少了這一步,等於把保險箱鑰匙貼在門口。習慣上會同時忽略 .env.local 這類衍生檔。
環境變數還有什麼好處?
同一份程式碼可以在不同環境使用不同設定值,開發、測試、正式各自一份,不必改程式碼就能切換。也方便定期更換金鑰,降低外洩後的風險。