用環境變數放秘密
讓 API key 跟密碼不在程式碼裡
⏱ 預估 ~7 分鐘
01 · 讀一讀
讓公司虧幾百萬美元的錯誤:把 API key 跟密碼直接 commit 到原始碼。
秘密進 git history 就永遠在那。即使你下個 commit 刪,任何 clone repo 的人都能在歷史找到。Bot 主動掃 GitHub 找意外 commit 的 key、幾分鐘內利用。
解法簡單:環境變數。不在程式寫秘密,你存到從不 commit 的 .env 檔。你程式在執行時讀值,你秘密保持安全。
💡 想像一下把環境變數想成辦公室保險箱。你不把密碼貼螢幕(那是寫死程式碼裡)。你鎖保險箱(.env 檔)、需要時拿出來。當然不影印保險箱內容發給所有人(commit 到 git)。
02 · 讀一讀
你繼承一個有嚴重問題的 Node.js app:秘密寫死在原始碼。我們找它們,然後修設定讓秘密安全存。
03 · 終端機練習
先找程式碼裡寫死的秘密。用 grep 搜尋任何像 API key 或密碼的東西。
(本節為互動練習,請啟用 JavaScript 體驗)
04 · 終端機練習
現在建 .env 檔安全存秘密。這檔放真實值,我們確認它從不 commit 到 git。
(本節為互動練習,請啟用 JavaScript 體驗)
05 · 終端機練習
最關鍵步驟:把 .env 加到 .gitignore 讓它從不被 commit。沒這個,git add . 會把你秘密放進下個 commit。
(本節為互動練習,請啟用 JavaScript 體驗)
06 · 看程式碼
下面是修好的 app.js 長什麼樣。不是寫死的值,它在載 .env 後從 process.env 讀。
app.js — 用 env var(修好)
require('dotenv').config();
const express = require('express');
const app = express();
// Secrets come from .env, not hardcoded
const API_KEY = process.env.API_KEY;
const DB_PASSWORD = process.env.DB_PASSWORD;
const PORT = process.env.PORT || 3000;
console.log('API key loaded:', API_KEY ? 'Yes' : 'No');
// NEVER log the actual key value!
process.env 在 dotenv 載入後從 .env 檔讀。|| 3000 在 PORT 沒設時提供預設值 — 常見模式讓你 app 沒 .env 也能動。
07 · 選擇題
為什麼永遠不要把 .env 檔 commit 到 git?
- 它有秘密,會曝給任何 clone repo 的人
- 讓 repo 太大
- Git 不支援 .env 檔
- .env 檔只在你本機運作
08 · 填空
在 Node.js 用 dotenv,你用 process._____.API_KEY 存取叫 API_KEY 的環境變數。
09 · 確認清單
環境變數安全清單。這三步該變成你每個專案的本能。
- .env 列在 .gitignore
- 我從不 log 真實秘密值
- 我建了 .env.example 帶佔位值
⚠ 完整互動體驗需要 JavaScript。請啟用 JavaScript 後重新整理。
※ 本站為獨立繁中教學專案,非 Anthropic 官方產品。Claude™ 為 Anthropic, PBC 商標。