直接回答:Claude Code 可以讀到 .env 嗎
是的。Claude Code 預設可以讀取你啟動時所在目錄及其所有子目錄中的任何檔案,包括:
.env、.env.local、.env.productionconfig/database.ymlcredentials.json.ssh/(如果你在 home 目錄啟動的話)
更重要的是,即使你沒有主動要求 Claude Code 讀取 .env,它在分析專案結構時可能會自動讀取。
為什麼這很危險
問題不是 Claude Code 會「偷走」你的 API Key。問題是:
- 你的 .env 內容會被送到 Anthropic 的 API 伺服器——作為對話上下文的一部分
- API Key 可能出現在 AI 生成的程式碼中——AI 可能把你的真實 Key 寫進範例
- 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 整合方便 |
如何測試你的防護是否有效
設定完防護後,用以下步驟驗證:
- 啟動 Claude Code
- 直接問它:「請讀取 .env 的內容」
- 如果設定正確,Claude Code 應該無法存取 .env
- 再問它:「請搜尋專案中所有包含 API_KEY 的檔案」
- 確認它不會找到你的真實 Key
常見問題
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 不要讀取這些檔案。兩者應該同時設定,功能互補。