本卡屬 FR-114 資安修正(母卡 CM-2019),第 4 批「憑證殘留」卡 4-2,修 SUMMARY #12(出自 M23/M16-7/M17-8)。高。修法規格來自本批查證,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b4.md「卡 4-2」段。
問題是什麼(白話)
一組可以繞過所有客戶資料隔離的資料庫管理員密碼,被寫進大量進版控的檔案裡,其中一份還湊成了「可以直接複製貼上執行」的完整連線指令。同時發現有一支「產生說明文件」的腳本,每次執行都會把這組密碼原封不動寫進它產出的新文件裡——這條路不堵住,清了舊的殘留,很快又會長出新的殘留。
首腦核對:
- 值取自 .env 的 DB_PASSWORD(9 字元);REDIS_PASSWORD 是同一組值,清一次兩邊都解決
- git grep 全字串比對命中 250 個檔(材料檔說 249,這次重算 250,一個檔的落差是正常時間差),行數層級共 2,012 行;分佈:docs/conversation-history/ 112、docs/features/ 67、docs/features-site/ 65、docs/issues/ 2、docs/claude/ 2、docs/system-design/ 1、docs/analysis/ 1
- 🔴 唯一還在持續寫入新殘留的來源:docs/system-design/scripts/generate_db_schema_docx.py:34,DB 連線參數裡 password 直接寫死;這正是 M16 第 7 條「一支產生文件的腳本把完整資料庫連線資訊寫死」那支
- docs/claude/ 下 2 個檔需手動清:project_drive_sync_test_data.md:18(連線資訊組合:188:25432/guidant_ai_stg/cm_app/密碼)、project_ssp_doc_parser_progress.md:101(cm_app 與 cmmgr 同密碼的說明)
- 優先處理的檔(FR-079 B2 F1 指出「湊成可直接複製貼上的連線指令」):docs/analysis/2026-05-28-poc-db-migration-plan.md:73(export PGPASSWORD=... 這種可直接執行的形式)+ :95/:99 兩處文字描述
- docs/features-site/ 的 65 個檔是 MkDocs build 產出(含 search_index.json,同樣含憑證原文),不能手改,要改來源 md 後重 build
- 其他也在用同一組密碼的環境(DEV、出貨基線庫 188:25432/guidant_ai、兩個「已退役但還連得到」的舊庫 188:25432/guidant_ai_stg 與 189:25432/guidant_ai_poc)——這些只列出來當唯讀盤點,不在本卡動作範圍:換密碼與停用舊庫屬環境異動,要決策者明確放行才能做
工作區
- BE 側:在 /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security(branch fix/security-b1)改,不要碰主 checkout(掃描線正在讀它)。跑服務用 PORT=8001。
在哪裡
docs/system-design/scripts/generate_db_schema_docx.py:34 password="<真值>" 寫死 → 改讀環境變數(未設就 raise)
docs/claude/memory/project_drive_sync_test_data.md:18 手動清(連線資訊組合,密碼替換)
docs/claude/memory/project_ssp_doc_parser_progress.md:101 手動清(密碼替換)
docs/analysis/2026-05-28-poc-db-migration-plan.md:73,95,99 優先處理(可直接複製貼上執行的連線指令)
docs/conversation-history/(112 個檔) 批次清
docs/features/(67 個檔,含 .html 鏡像) 批次清,.html 鏡像跟著來源 md 一起處理
docs/issues/(2 個檔) 批次清
docs/system-design/(1 個檔,扣除上面 generate_db_schema_docx.py 這支程式) 批次清
(docs/features-site/ 的 65 個檔含 search_index.json:不手改,改完 docs/features/ 來源 md 後跑 doc-site-build 重 build 清)
怎麼修
- 🔴 先回寫本卡問決策者:plan-b4 開頭查到資料庫管理員密碼/系統管理員密碼/Google AI 金鑰與現行 .env 一致——是否已換發?沒換發則本卡清字串前要先換(換密碼屬環境異動、由決策者做)。回寫後停,狀態留 Not started,不要自己選。
- ①(待上方問題回覆確認密碼已換發或換發完成後,才能動手清本卡的 250 個檔;若決策者裁定「先不換,只整理版控」,則本卡改為單純整理,但要在回寫裡明講「密碼未換發、漏洞仍在,只是把版控清乾淨」)
- ② 堵住還在寫入的路徑:generate_db_schema_docx.py:34 改成從環境變數讀取連線密碼(os.environ 或既有 .env 讀取 pattern),未設定就清楚報錯,不要 fallback 到任何寫死的值。
- ③ 批次清理 250 個檔的字串殘留,docs/claude/ 下的 2 個檔要手動編輯(密碼換成「請查 .env」這類指引文字),docs/analysis/2026-05-28-poc-db-migration-plan.md 的 3 處優先處理(尤其 :73 那行可直接執行的連線指令)。