人看到的網頁
瀏覽器畫出來的樣子。看起來一切正常。
第一格是一篇普通的校園新聞——人看到的樣子。你可以在裡面藏一句指令,再選擇藏的方法。然後按「看模型看到的」:模型讀的是整份原始文字,藏起來的那一句,它一字不漏地看見。這就是提示注入(prompt injection)的起點。
瀏覽器畫出來的樣子。看起來一切正常。
Harness(執行框架,包住模型、替它執行工具的那層程式)的「讀取網頁」工具交給模型的,是整份文字——沒有顏色、沒有字號、沒有「這句其實看不見」。
這裡的 Agent(代理)指模型、Harness 與工具合起來的整個迴圈系統(見組件 02)。三盞燈對應 Simon Willison 所說的致命三要素(lethal trifecta):能讀私人資料、會讀不可信內容、有對外通道。三盞同時亮,資料就有一條完整的路可以被帶走;斷任何一角,這條路就斷了。
模型分不清指令與資料,這一點改不了;能做的,是在包住模型的那一層——Harness(執行框架)——設閘。五道防線都是 Harness 的功能,模型一個字都沒有改。
必須說明:這些防線都是「減少」,不是「消滅」。最可靠的是結構性的兩招——最小權限與白名單,因為它們不靠任何人看得準;其他幾道,靠的是有人看得準。
按「讓 Agent 摘要網頁」,看 Agent 迴圈怎樣走(畫法同組件 02:紫色是模型寫的字、黃色是請求單、灰色是 Harness、綠色是工具結果)。每一格都是送進模型上下文(context,即模型這一輪讀到的全部文字)的內容。結果完全由上面三段的設定決定,每次相同。
本頁所有模型輸出、工具結果與攻擊結果均為預先編寫的示意,並非真實模型即時產生;聯絡人、網址與電郵地址皆為虛構。
對模型來說,系統提示、你的任務、網頁內容、檔案內容、技能檔——全部都是送進同一段上下文的文字。它沒有一個可靠的方法分辨「這句是主人說的」還是「這句是網頁上寫的」。把指令藏在資料裡等模型讀到,就是提示注入(prompt injection);它可以藏在網頁、檔案、電郵,也可以藏在一個技能裡。
資料要被帶走,需要三件事同時成立:Agent 能讀到私人資料、會讀不可信內容(讓攻擊者有機會下指令)、有對外通道(把東西送出去)。少一件,這條路就不通。斷一角擋住的是「外洩」這一種攻擊——劫持回覆(菠蘿披薩)仍可能發生,但損失止於一句怪話。
問一句、查名單、不給工具、標記資料、先讀再裝——五道防線全在 Harness。而且必須說明:它們是減少,不是消滅。Anthropic 為 Claude for Chrome 的自主模式做紅隊測試(123 個測試個案):加入防護前,提示注入的攻擊成功率為 23.6%,加入後降至 11.2%——約減半,但不是零。
課堂討論用,每題兩分鐘。
第 1 題可引導的方向:多數人的助理三盞燈都亮——能讀檔案/電郵(私人資料)、會上網搜尋(不可信內容)、能寄訊息或發請求(對外通道)。先斷「對外通道」通常代價最小:讀不到網頁會令助理少了用處,但不給「寄出」只是多按一次確認。可順勢連到重點三:最小權限與白名單是結構性防線,不靠人看得準。
第 2 題可引導的方向:先讀 SKILL.md 全文,特別是「要求你做任務以外的事」與「要求你不要告訴用戶」這兩類句子——後者幾乎必定有問題。也要看它要求哪些工具權限:一個「摘要」技能不需要寄電郵。可回到第 4 段的「先讀再裝」對照:讀了但看不出來,安裝照樣會發生——所以陌生來源的技能,最穩妥是不裝,或在沒有對外通道的環境試用。