快速摘要
簡短回答:是的,Claude Code 可以讀到你的 .env 檔案。這篇文章教你四個層次的防護措施,從基本的 .claudeignore 到進階的 secrets manager,確保你的 API Key 不會因為使用 AI 工具而外洩。

飛飛安全評級

評估維度風險等級
資料敏感度
本機檔案權限
命令執行能力
第三方連線
新手誤用風險
企業使用門檻

直接回答:Claude Code 可以讀到 .env 嗎

是的。Claude Code 預設可以讀取你啟動時所在目錄及其所有子目錄中的任何檔案,包括:

  • .env.env.local.env.production
  • config/database.yml
  • credentials.json
  • .ssh/(如果你在 home 目錄啟動的話)

更重要的是,即使你沒有主動要求 Claude Code 讀取 .env,它在分析專案結構時可能會自動讀取。

為什麼這很危險

問題不是 Claude Code 會「偷走」你的 API Key。問題是:

  1. 你的 .env 內容會被送到 Anthropic 的 API 伺服器——作為對話上下文的一部分
  2. API Key 可能出現在 AI 生成的程式碼中——AI 可能把你的真實 Key 寫進範例
  3. Log 和對話紀錄可能包含敏感資訊——你的 Key 可能出現在除錯日誌中

防護層 1:.claudeignore

在專案根目錄建立 .claudeignore 檔案(語法和 .gitignore 相同):

# .claudeignore
.env
.env.*
*.pem
*.key
credentials.*
service-account*.json
config/secrets/

這告訴 Claude Code 不要讀取這些檔案。這是最基本也最重要的防護。

防護層 2:.gitignore 與 pre-commit hook

即使 AI 意外讀取了敏感資訊並寫入程式碼,.gitignore 和 pre-commit hook 可以防止它被提交到 Git:

# .gitignore
.env
.env.*
*.pem
*.key

設定 pre-commit hook 來自動檢測敏感資訊:

# 安裝 git-secrets
brew install git-secrets  # macOS
git secrets --install
git secrets --register-aws  # 檢測 AWS 金鑰格式

防護層 3:環境變數管理

最佳做法是不要在 .env 中存放真正的生產密鑰。開發環境使用測試用的 Key:

# .env(開發用,可以安全地讓 AI 讀取)
API_KEY=test_key_not_real
DATABASE_URL=postgresql://localhost:5432/dev_db

生產環境的密鑰應透過部署平台的環境變數設定(Vercel、Railway 等)注入。

防護層 4:Secrets Manager

企業環境應使用專業的密鑰管理服務:

服務適合對象特色
AWS Secrets Manager使用 AWS 的企業自動輪替、細粒度存取控制
HashiCorp Vault多雲環境企業開源、跨平台、動態密鑰
1Password CLI小團隊簡單好用、和 .env 整合方便

如何測試你的防護是否有效

設定完防護後,用以下步驟驗證:

  1. 啟動 Claude Code
  2. 直接問它:「請讀取 .env 的內容」
  3. 如果設定正確,Claude Code 應該無法存取 .env
  4. 再問它:「請搜尋專案中所有包含 API_KEY 的檔案」
  5. 確認它不會找到你的真實 Key
飛飛的真實踩坑經驗
我曾經在一個專案中忘了設定 .claudeignore,結果 Claude Code 把我的 Stripe Test Key 寫進了範例程式碼中。雖然是測試用 Key,但如果是正式 Key 就很危險了。現在我每個專案第一步都是建立 .claudeignore。

常見問題

Claude Code 會把我的 .env 存在 Anthropic 伺服器上嗎?

Claude Code 發送的對話內容會經過 Anthropic 的 API 處理。Anthropic 表示不會將 API 輸入用於模型訓練,但你的 .env 內容確實會以對話上下文的形式傳輸。最安全的做法是不讓 Claude Code 讀取 .env。

其他 AI 工具(Cursor、Copilot)也有同樣問題嗎?

是的。任何可以存取你本機檔案的 AI 工具都有類似風險。Cursor 的 codebase indexing 也會讀取 .env,GitHub Copilot 則主要透過編輯器上下文。每個工具都應設定排除規則。

.claudeignore 和 .gitignore 有什麼不同?

.gitignore 是告訴 Git 不要追蹤這些檔案。.claudeignore 是告訴 Claude Code 不要讀取這些檔案。兩者應該同時設定,功能互補。