安全公司 Apiiro 的研究,經 The Hacker News(2026-11-07) 與 Ars Technica(2026-11-09) 報道,指開發者在 Claude Code 選擇 “Yes, and don’t ask again” 後,帶有密碼或 token 的完整指令可能被寫入專案內的 .claude/settings.local.json,並出現在公開 GitHub。The Hacker News 寫:公開副本有 104,185 份(分布在 103,617 個版本庫),其中 1,122 份含至少一項秘密,合共 1,379 項。Ars 所寫「超過 10 萬/約 1,100」與上述精確數字相符。研究原文見 Apiiro 該篇報告。設定與權限說明請以官方 Claude Code 設定文件 與 權限文件 當日為準。
問題如何出現
Claude Code 在執行大多數 Bash 指令前會先詢問。當開發者選擇 “Yes, and don’t ask again”,許可規則會寫入專案內的 .claude/settings.local.json。若獲准的是一條完整的精確指令,其中的密碼、API 金鑰或其他秘密可能以明文一併寫入;檔案一旦被提交,便可能出現在公開版本庫。The Hacker News 與 Ars 都提到,在含有秘密的那些檔案擁有者之中,有 63 個組織。刪除目前工作樹上的檔案,並不能撤銷 git 歷史或 fork 裡的舊內容。設定與權限說明以官方文件當日為準。
機制
下表說明設定檔如何被寫入,以及官方保護的範圍:
| 項目 | 說明 | 注意 |
|---|---|---|
| “Yes, and don’t ask again” | 選擇此項後,Claude Code 會把該次許可存成 allow 規則,寫入 .claude/settings.local.json | 此檔是專案本機設定,只作用於你在該專案中的工作階段 |
| 規則類型 | 規則有時是模式(例如 npm test *),有時是一條完整的精確指令 | 若是精確指令,其中的密碼或 token 可能以明文一併寫入 |
| 全域 git excludes | 官方文件寫,Claude Code 第一次在尚未忽略該檔的 git 版本庫寫入時,會把 **/.claude/settings.local.json 加入使用者電腦的全域 git excludes | 這是該使用者、該部電腦上的 git 設定,不會自動寫入專案 .gitignore,也不會隨版本庫帶走 |
| 專案 .gitignore | Claude Code 不會自動把該檔加入專案自己的 .gitignore | 若是親手建立該檔,須自行加入專案 .gitignore |
| 複本與歷史 | 版本庫被複製到另一部電腦,或資料夾後來才初始化成版本庫,該檔仍可能被意外上傳 | 已提交的檔不會因刪除目前複本而從 git 歷史消失;fork 亦可能保留舊內容 |
| 與共享設定檔的分別 | .claude/settings.json 是官方預期可以提交給團隊的共享檔,與本機的 settings.local.json 不同 | 不要把秘密寫進共享設定檔的 allow 規則 |
香港開發者可以做甚麼
以下步驟只適用於檢查自己所屬的組織、自己的版本庫與自己的 git 歷史。建議先輪替憑證,再清理檔案:
| 步驟 | 做甚麼 | 注意 |
|---|---|---|
| 自查檔案 | 在自己的 GitHub 組織搜尋 .claude/settings.local.json 與 .claude/settings.json,並檢查各版本庫的 git 歷史 | 即使目前檔案已刪除,歷史紀錄仍可能保留舊內容 |
| 先輪替再清理 | 先更換該檔曾經保存過的每一組密碼、token 與金鑰,然後才清理檔案 | 刪除目前的檔不能撤銷已公開的歷史;fork 與 git 歷史仍可能保留舊內容 |
| 停止追蹤本機檔 | 執行 git rm --cached .claude/settings.local.json,並把該路徑加入專案自己的 .gitignore | 取消追蹤只作用於目前工作複本;要把忽略規則隨專案走,須把路徑寫入專案 .gitignore 並提交該變更 |
| 刪除含秘密的規則 | 在自己的電腦打開該檔,刪除任何包含秘密的規則 | 即使從未提交,本機檔案仍可能含有敏感內容 |
| 使用環境變數或機密管理工具 | 指令改為引用變數(例如 $DB_URL)或機密管理工具,讓存下來的規則只有變數名 | 不要把秘密直接寫進指令 |
| 批准模式而非帶秘密的精確指令 | 使用模式寫法,例如 Bash(npm run test *) 或 Bash(npm run:*),而不是批准一條帶有秘密的完整指令 | 官方設定文件的許可例子亦使用模式寫法 |
報道中的秘密類型
根據 The Hacker News 轉述的研究數據,這些秘密包括資料庫密碼、面向公開伺服器的 SSH 登入、GitHub/GitLab/npm token,以及 AWS 金鑰等。報道指超過三分之一的秘密可直接打開資料庫,其中包括 379 個資料庫密碼;另有 43 個 SSH 登入、42 個程式碼託管平台 token,以及 23 個 AWS 金鑰。Apiiro 並未逐一測試這些秘密是否仍然有效,但有機構確認,被通知的金鑰當時仍在使用。常見掃描器不一定能找出寫在指令裡的密碼:在 1,122 份含秘密的檔案之中,gitleaks 標出 564 份、TruffleHog 標出 643 份,兩者都沒有標出的仍有 215 份。
官方相關回應
Ars Technica 引述 Claude Code 的 Boris Cherny 在 Hacker News 週末討論中表示,團隊正在了解可以做些什麼來防止此事,並認為這些設定檔幾乎不應被提交到 git。他建議使用 secret scanner,並表示團隊考慮日後把這類掃描功能內建到 Claude Code。報道亦提到他建議使用 Claude Code 的 auto mode 處理例行權限提示;有使用者指出,即使在 auto mode 下,敏感指令仍可能被寫入設定檔,Cherny 稱之為 “good catch”,團隊正在思考如何改進。來源並未顯示官方修補已經推出。設定與權限說明以官方文件當日為準。
結論
香港若正在使用 Claude Code,應先檢查自己所屬組織與版本庫(包括 git 歷史)有沒有 .claude/settings.local.json 或把秘密寫進共享 .claude/settings.json 的情況,並先輪替受影響的密碼、token 與金鑰,再以 git rm --cached 加上專案 .gitignore 清理本機設定檔。批准權限時,優先使用模式規則,並避免把秘密寫進指令。若要一併了解 Claude Code 在香港開發流程中的其他用法,可參考 Claude Code 接 Xcode:香港開發者點用 Apple MCP(2026)、Claude Code 背景 subagent 狀態成本:v2.1.316+ 約平 99%(香港 2026)、Claude Code vs Codex:coding agent/harness 點 steer、點 delegate(香港 2026),以及今日已刊出的 Claude Fable 5.2 香港指南 2026:幾時用、點接入、同 Opus 5.5 分別。
更新於 2026-11-10(Asia/Hong_Kong)。