← Agent 實驗室
延伸 安全

Prompt Injection 安全實驗

Agent 讀進來的網頁、issue、檔案、工具回傳,都可能藏著給模型看的惡意指令。左邊選內容來源、決定有沒有注入、打開哪些防線;右邊看那段文字怎麼進入 context、模型想做什麼、每一層防線擋不擋得住。

情境與防線

改動即時重跑
外部內容的來源
內容裡有沒有被注入指令
防線(可複選)

這是教學用模擬:模型的反應(哪些注入會被識破)是固定的示意,真實模型有時擋得住、有時擋不住。網址、腳本都是虛構的。設定欄位與行為請以 Claude Code 官方文件為準。

實際發生的事

① Agent 送給模型的 request(注入的文字藏在 tool_result 裡,已標示)

      
② 模型的下一個 tool_use

      
③ 防線依序檢查(Agent 在真正執行前)
    ④ 如果只開其中一層,三種注入各自擋不擋得住
    只開這一層

    Agent 還有哪些風險?

    不只 prompt injection
    風險怎麼發生對策
    機密外洩讀到 .env、金鑰、連線字串後貼進回覆或送出網路敏感路徑 hook、不要把機密放在專案資料夾、限制網路
    誤刪資料模型誤判,執行 rm -rf、DROP TABLE、git push --force指令要確認、PreToolUse hook 擋危險指令、在分支與備份上作業
    供應鏈安裝來路不明的 MCP server、套件、skill;它們有你的權限只裝可信來源、先看原始碼與要求的權限、鎖定版本
    過度權限一開始就給 Bash、全部檔案、正式環境的帳號最小權限:用到才開、唯讀優先、開發與正式環境分開

    看完要記得

    口試怎麼答(約 30 秒)

    Prompt injection 是攻擊者把惡意指令藏在 Agent 會讀的外部內容裡,因為這些內容透過 tool_result 進入 context,模型分不出哪些是資料、哪些是指令。單靠一層防線不夠,所以我會用縱深防禦:外部內容標成資料、工具最小權限、PreToolUse hook 擋敏感路徑、沙箱限制網路,最後敏感操作要人確認。重點是硬限制由程式與系統執行,不依賴模型自己識破。