本卡屬 FR-078(母卡 CM-1602)。來源:N2(CM-1604)F2 的延伸——報告指出金鑰也散在
docs/conversation-history/,首腦查證後發現範圍比報告所寫更廣。這些金鑰已於 2026-09-08 全數撤銷,無財務風險,本卡是清理不是止血。
2026-09-08 已經把 .env.test 撤出版控、四把 API 金鑰也都撤銷重發了(commit 5746cef1/56c1dc43)。但同樣那四把金鑰的字串,還散落在版控裡的 15 個檔案中——13 個是對話紀錄的原始 dump,2 個是 Trivy 掃描報告的 JSON。
為什麼還是要清:① 下一次資安掃描會再把它們掃出來一次,而掃描工具無從判斷金鑰已撤銷,會再報一次 HIGH,浪費一輪驗收;② 交外部稽核或客戶時,版控裡有一堆看起來像活金鑰的字串,解釋成本很高;③ 對話紀錄以外的地方(Trivy 報告)代表掃描工具自己的產出也會外洩掃到的秘密,這件事本身要記下來。
含金鑰字串的檔案:15
其中受版控: 13
與已撤銷金鑰同一把:9 個檔(OpenAI/Anthropic/Google 各 9;LangChain 1)
分布:
docs/conversation-history/** 13 檔(對話原始 dump)
docs/security-reports/2026-07-25/trivy-backend.json
docs/security-reports/2026-07-25/trivy-backend-final.json
確認方式(runner 自己重跑一次確認範圍沒變,不要把值印進任何落地檔或 commit message):
grep -rlE 'sk-proj-|sk-ant-api03-|AIzaSy|lsv2_pt_' docs/ | wc -l
<已撤銷,原為 OPENAI_API_KEY> 這類標註。保留上下文可讀性——這些是歷史紀錄,整段刪掉會讓紀錄失去意義。參照 99ff37af 那次 redact 的做法(該 commit 就是批次 redact conversation-history)。Billows@、jedi@、ghp_、glpat-、BEGIN .*PRIVATE KEY。發現新的不要自己處理,回寫回報(可能牽涉還沒撤銷的憑證)。5746cef1 的 message 裡。.env.test(已撤出版控,本機檔保留)。N2 的報告建議「加 CI 的 secret scanning,讓下一次在 push 前就被擋下」。這是治本的做法,但屬新增基礎設施、要決策者裁。請在卡片回寫時提出評估(用什麼工具、掛在哪個階段、誤報怎麼處理),不要直接動手建。