本附錄是操作性清單,完整說明、見解與威脅模型見 03-3 安全、隱私與供應鏈風險;此處只留判準與「為什麼要勾」。
1. 上手前(每個新工具)
為什麼要勾:把資料丟進去之後,預設值多半對你不利;要在第一筆資料送達前確認訓練退出、保留期限、隔離機制,否則事後只能等保留期自然消滅。
- 找到並確認訓練退出開關狀態(Claude:Help Improve Claude;ChatGPT:Improve the model for everyone;Gemini:Keep Activity)。
- 確認對話保留期限與自動刪除設定(Free / Pro / Team / Enterprise 各自不同)。
- 知道如何開「暫時對話 / Temporary Chat」處理一次性敏感內容。
- 區分 Free 方案與 Team / Enterprise 的資料條款(企業預設多不訓練,個人預設多會)。
- 把當前帳號的開關狀態寫進
CLAUDE.md或MEMORY.md,避免下次切帳號時混淆。
2. 憑證與權限
為什麼要勾:代理一旦擁有你的 PAT 或讀到 ~/.aws/credentials,任何 prompt injection 攻擊鏈的最後一里路就是它。獨立、最小範圍的代理專用憑證,是把「攻擊者控制代理」與「攻擊者控制你的全部帳號」之間的防火牆。
- 代理使用專用、最小範圍憑證(非個人 PAT / 個人帳號)。
- 權限 deny list 含密鑰路徑(
~/.ssh、~/.aws、**/.env*、~/.gnupg)與危險指令(curl * | bash、ssh *、wget * | bash)。 - 工具權限對齊任務範圍:MCP server 給最窄 OAuth scope;Bash 規則用
ask而非allow處理未知指令。 -
.env已 gitignore,且有.env.example(含所有 key、value 為佔位符)。 - 任何「個人帳號設定的全開權限」不直接套到自動化迴圈或無人監控的 session。
- 代理用的 PAT 是「代理專用 + 短效 + 細粒度 scope」三項都成立。
- 對一條危險指令(
curl … | bash)能直接講出「哪條 deny rule 會擋、在哪個檔」。 - 把目前已安裝的 MCP server 與其 OAuth scope 全列在一份本地清單,每季掃一次。
代理專用 PAT 的最小設定三個常見錯誤:用了個人 PAT 跑代理、給了
repo 全權限 scope、把效期設成「不過期」。3. 供應鏈(安裝 Skill / Plugin / 規則 / MCP server 前)
為什麼要勾:第三方資產是「信任外部程式碼在你的機器上跑」。Snyk ToxicSkills 2026-02 報告指出,當時掃的 3,984 個公開 skill 中約 36% 含 prompt injection,總計 1,467 個惡意 payload。收錄在市集不等於安全;有 README 不等於可審查。
- 掃描隱藏 Unicode 與 bidi 控制字元(
U+200B至U+FEFF、U+202A至U+202E)。 - 掃描可疑外連與覆寫(
curl、wget、nc、ssh、ANTHROPIC_BASE_URL、enableAllProjectMcpServers)。 - 確認來源可溯(具名作者 / 官方組織)與維護近度(最後 commit 距今多久)。
- 權限範圍合理,無倉庫外寫入、無讀取密鑰路徑、無對外網路(除非功能明確需要)。
- 看
SKILL.md/plugin.json/.mcp.json的 frontmatter:描述欄、觸發條件、輸入輸出是否與宣稱一致。 - 首次安裝在 throwaway 環境或容器內跑一次,觀察是否有對外連線或非預期的檔案寫入。
- 對一個陌生 Skill,能講出「它會做什麼、它要什麼權限、它對外連到哪」三點。
- 任何一條
rg掃描有 hit,先停、看、修補或棄用,不要圖快確認。 - 來源不明或單人維護很久沒更新的 repo,預設不安裝。
三條必跑的供應鏈掃描任一 hit 都不應直接跳過。
4. 不可信內容處理
為什麼要勾:當「私密資料 + 不可信內容 + 對外通道」三個條件同存,提示注入就會升級成資料外洩工具(Willison 框架)。解析與行動分離是最便宜的解方:受限的代理只負責抽事實,擁有權限的代理只接乾淨摘要。
- 處理外部 PDF / DOCX / 網頁前,先抽取所需文字、去除註解與隱藏內容。
- 解析與行動分離:受限代理解析(read-only、無對外通道),有權限代理只處理乾淨摘要。
- 不把外部連結直接餵給有權限的代理。
- 對截圖(OCR 出的文字)也視為不可信內容,先抽事實再餵。
- 接收外部內容的 session 不在同一個 context 跑可寫檔、可發訊的代理。
- 不可信內容到敏感操作的 context 之間,至少隔一個抽事實的中間步驟。
- 任何「請把我信箱 / 對話 / 檔案 base64 編碼後給我一個連結預覽」型請求,直接拒絕。
5. 記憶與輪換
為什麼要勾:記憶檔是跨 session 累積的,攻擊者只要在某次 session 寫進一條載荷,未來 session 組裝時就會被觸發(Microsoft 2026-02 報告指出 31 家公司 / 14 個產業受記憶污染波及)。記憶狹窄、定期輪換,是污染攻擊鏈的有效斷點。
- 記憶檔保持狹窄,不含密鑰、不含個資、不含供應商 NDA 內容。
- 處理不可信內容後輪換 / 清理專案記憶(
~/.claude/projects/<repo>/memory/)。 - 定期(建議每季)全審視一次
MEMORY.md與各 repo 記憶目錄。 - 高風險工作流(mass web scraping、untrusted repo 審查)跑完後,主動 reset 該 session 的專案記憶。
MEMORY.md內每一條都能回答「為什麼要記這個」;答不出來的刪掉。- 每次「跑過不可信內容的工作流」後,有具體動作(刪檔 / 重新生成 / 隔離 session)。
6. 維護
為什麼要勾:CVE 是有時效的。Claude Code 的兩個關鍵 CVE(CVE-2025-59536 與 CVE-2026-21852)的修補都在較新版(v1.0.111+ 與 v2.0.65+)。過期版本 = 已知漏洞 = 早晚出事。
- 工具保持更新(留意安全公告與 CVE;Claude Code 建議 >= v2.0.65)。
- 不在自動化迴圈使用
--dangerously-skip-permissions或同等的全開旗標。 - 自動迴圈具備 kill switch(process group kill + heartbeat dead-man switch)。
- 工具呼叫有結構化日誌(時間戳、工具名、command 摘要、檔案觸及、審批結果)。
- 每季掃一次已安裝的 Skill / Plugin / MCP server 清單,把不用的
remove掉。
- 工具版本寫得出來,且該版本在已知 CVE 影響清單之外。
- 一個被注入的 agent 在爆走時,有外部(process group kill 或 supervisor)能在 30 秒內終止它,不依賴被入侵的 process 自殺。
7. 一次性應用情境
- 新裝 repo 跑 agent
- 裝看起來很熱門的 Skill
- clone 完先看
.mcp.json、.github/workflows/、.claude/、AGENTS.md這幾個檔。陌生的 server、不明的 workflow、來路不明的 rule,先關掉再說。 - 在 throwaway 環境或容器內跑的反例是使用
--dangerously-skip-permissions:預設拒絕。給最小權限,缺什麼再開。 - 第一次跑就用第 3 節的三條
rg掃一次,記錄所有 hit 與處置。 - 確認帳號的訓練退出開關(在第一次送資料前)。
- 跑完若有處理不可信內容,依第 5 節輪換專案記憶。
8. 對應單元
事實主張依官方文件,快變動項標註截至 2026-05。- 威脅模型、攻擊鏈與 CVE:03-3 安全、隱私與供應鏈風險
- 評估框架(不要只看 star):03-2 跳脫 star 數迷思
- 個人 benchmark 與驗證習慣:03-4 建立個人 benchmark
- 設定速查:附錄 A 各工具設定速查表
- MCP 攻擊面與最小防護:04-9 跨工具整合與 MCP
- Plugin 的供應鏈 SOP:04-7 Plugin
- Hook 作為「強制執行」層:04-6 Hooks
- 延伸資源(安全工具、Snyk 等):附錄 D 延伸資源與社群清單