本卡屬 FR-188(母卡 CM-3728),修 FR-187 資安掃描發現的 #251(低,3:0)。嚴重度:低。發現原文、檔名行號、面板票數在
docs/features/FR-187-2611-post-fr172-security-scan/reports/(工作坊工作區compliance-manager-be/.worktrees/CM-3711/裡,主線還沒合;總表docs/features/security-scan-consolidated/README.md§3.1 同樣在那裡)。Stage 未排,由排批的人決定(見下方「排批注意」)。
Agent 線上開通碼(activation_code)以明文寫進 api 日誌與 app.log:全站請求日誌經 mark_password 遮罩,但鍵名規則只認 password/passphrase/secret/token/credential/authorization/api_key/private_key,activation_code 不在內(同一個請求的 enroll_token 會被遮)。開通失敗時碼還沒被用掉,看得到日誌的人抄走就能拿去開別台。
遮罩規則有兩份:日誌出口用 jedi-common 的 mark_password/mask_secrets_in_text,錯誤追蹤用 jedi-masking。兩份的鍵名規則一樣,都要加,否則開通失敗的例外送到錯誤追蹤時一樣會帶出去。
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-common/jedi_common/utils/common_utils.py:139-142 _SECRET_KEY_PATTERN
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-masking/jedi_masking/masking.py:11-12 _SECRET_KEY_RE
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-masking/jedi_masking/masking.py:25-30 _TEXT_SECRET_KEY(文字型遮罩)
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/common/middleware/app_mw.py:243-257 呼叫端(只讀參考,主系統不用改)
行號以 2026-11-09 主線為準,對不上就以內容為準。
activation[_-]?code。不要加太寬的 _code$(會把 error_code、event_code、status_code 全遮掉,日誌變得不能讀)。setup_token、otp、verify_code),一起加;回寫列出查了哪些、加了哪些。_KEY_MAX_LEN 與佔有式量詞的效能保證(common_utils.py 檔頭註解):新規則不能引入回溯,加完跑既有的長字串效能測試。{"activation_code": "X"} 遮完找不到 X」,文字型(activation_code=X)也測;error_code 不被遮。突變測試:把新規則拿掉要紅。log/app.log 與 api 日誌裡開通碼是 ***。