是什麼

提示詞注入是針對大模型應用的一類攻擊:攻擊者構造一段輸入,讓模型把這段輸入當成新的指令來執行,從而偏離開發者原本設定的任務。OWASP 在其面向大模型應用的十大風險清單中把它列為 LLM01,也就是第一位,定義是「使用者提示以非預期的方式改變了大模型的行為或輸出」,並特別指出這種操縱不必是人類可讀的內容——模型也可能被人眼察覺不到的輸入影響。

它分兩類:

直接注入(direct prompt injection),使用者本人在輸入裡寫下試圖覆蓋原有指令的文字,比如「忽略上面所有規則」。既可能是有意攻擊,也可能是無意造成的越界。

間接注入(indirect prompt injection),惡意指令來自模型讀取的外部素材——網頁、文件、郵件、資料庫條目、程式碼註釋、圖片裡的文字。模型在處理這些材料時把其中的指令當成任務,行為隨之改變。這類更隱蔽,因為受害者本人從頭到尾沒做錯任何事。

一個關鍵的認知:大模型沒有「指令」和「資料」的硬邊界。系統提示、使用者輸入、檢索到的網頁,最終都匯成同一串上下文餵給模型。傳統軟體裡靠型別系統和轉義處理的注入問題,在這裡沒有對應的天然隔離。

為什麼重要

只要模型的輸出僅僅是文字,注入的後果還限於說錯話。一旦模型能呼叫工具,性質就變了。

AI Agent 的價值在於能自己跑完多步任務:讀郵件、查資料庫、寫檔案、調 API、下單。這意味著它必然要讀不可信內容,也必然握有可以產生真實後果的許可權。兩者相加,一段藏在網頁裡的文字就可能變成一次真實的轉賬、一封發出去的郵件、一次資料外傳。瀏覽器助手是這個組合的極端形態——它讀的是任意網頁,用的是使用者已登入的會話。

檢索增強生成同樣天然暴露:RAG 的整個設計就是把外部文件塞進上下文,如果知識庫裡混進一條被汙染的記錄,它就會在每次命中時持續生效。多個 Agent 互相傳遞訊息的編排系統裡,一次注入還可能在鏈條上擴散。

在 AI 產業鏈中的位置

提示詞注入位於應用層與基礎設施層的接縫上:它不是模型本身的 bug,而是「把機率模型接進有許可權的系統」這一架構選擇帶來的固有風險。產業鏈上因此長出一批相鄰供給——提示防火牆與輸入輸出過濾、Agent 沙箱與許可權閘道器、模型行為紅隊測試服務,以及在協議層收斂工具許可權的嘗試(例如圍繞 MCP 的許可權與審批設計)。

防禦思路

OWASP 給出的建議可以歸納為七條,核心不是「找到一個能識別惡意提示的模型」,而是縱深防禦:用詳細的系統提示約束模型行為;明確定義並校驗輸出格式;對輸入輸出做過濾;按最小許可權原則分配工具訪問;高風險操作要求人工審批;把不可信內容隔離出來並顯式標註;定期做對抗性測試。

工程上還有兩條經驗值得單獨說。其一,把「判斷」和「被攻擊面」分開——讓做安全判定的那個元件只看後設資料、不接觸不可信正文,攻擊就難以直接影響判定。其二,許可權收斂比內容識別更可靠:一個只能讀不能寫的 Agent,被注入了也造不成損失;給它開了傳送與付款許可權,再好的提示過濾也只是機率防線。

需要坦白的是,業界目前沒有能宣稱徹底解決這個問題的方案。模型輸出的隨機性決定了任何單點防禦都有漏網機率,這也是為什麼「高風險動作人工確認」至今仍是最被廣泛採用的兜底措施。