文章 發布於 AIA: 2026年4月25日

Web-based IDPI 真實網頁案例:網頁如何把指令送進 agent

Unit 42 觀察到真實網頁上的網頁型間接提示詞注入攻擊(web-based indirect prompt injection,IDPI),案例包括讓惡意廣告通過 AI 審核、SEO 操弄、未授權交易、資料破壞、阻斷服務、敏感資訊外洩和系統提示詞外洩。防禦重點是:網頁擷取、HTML 解析、OCR、中繼資料(metadata)抽取、模型上下文組裝、agent 工具權限,以及資料最後會流到哪裡,都不能分開看;它們其實是同一條 agent 安全邊界。

Indirect Prompt InjectionTool AuthorizationAgentic AIWeb Security
9 項對應的 AIDEFEND 防禦手法
來源: Fooling AI Agents: Web-Based Indirect Prompt Injection Observed in the Wild 
作者 Beliz Kaleli, Shehroze Farooqi, Oleksii Starov, Nabeel Mohamed · 原文發布: 2026年3月3日

威脅分析

  • 網頁正在變成把指令送進 agent 的入口。 攻擊者不一定要直接碰到模型,也不一定要攻擊模型本身;只要把指令藏進網頁,等瀏覽器、搜尋工具、廣告審核系統、爬蟲、copilot 或自主 agent 之後去摘要或分析那個頁面,就可能把藏在頁面裡的文字帶進模型。
  • 實際觀測到的意圖已經不只是惡作劇。 Unit 42 的遙測資料包含讓惡意廣告通過 AI 審核、替釣魚網站做 SEO 操弄、強迫付款流程、敏感資訊外洩、系統提示詞(system prompt)外洩、資料破壞和阻斷服務。
  • 藏指令手法是順著網頁解析流程設計的。 文章整理了可見純文字、隱藏 CSS、零字級文字、畫面外定位、HTML 屬性偽裝、SVG 或 CDATA 包裝、JavaScript 執行期組裝、canvas / OCR 路徑,以及 URL fragment 裡藏指令等手法。
  • 繞過手法多半靠語意與社交工程。 Unit 42 看到很多樣本用「系統更新」、「合規檢查」、「開發者模式」這類權威口吻說服模型照做,也搭配 JSON / 語法注入、多語指令、把惡意指令拆開再重組、同形異字、Unicode 由右至左覆寫和多層編碼。
  • 風險大小取決於 agent 手上有多少權限。 同一段藏在網頁裡的指令,對只能摘要的工具可能只是低影響干擾;但如果 agent 能審核廣告、購買商品、呼叫付款連結、寫資料庫、揭露內部資料或執行命令,影響範圍就會完全不同。

適用的 9 項 AIDEFEND 防禦手法

AID-H-020.002
Secure HTML Rendering & Content Demotion
極高
這是最直接對應網頁攻擊面的控制。網頁內容送進 LLM 前,擷取層應該先移除或降權處理 scripts、styles、隱藏 DOM 區塊、畫面外文字、HTML 屬性、SVG 裡藏的惡意內容、canvas 產生的文字,以及其他主動或低可見度內容;最後只把明確標成資料的整理版內容交給模型,不把原始網頁裡可能被當成指令的文字整包送進去。
AID-D-001.001
Per-Prompt Content & Obfuscation Analysis
極高
Unit 42 的分類幾乎就是一份混淆與意圖訊號清單:Base64、HTML entity、URL 編碼、多層編碼、隱形字元、同形異字、雙向文字覆寫、把惡意指令拆成多段,以及假冒系統或管理者口吻的指令。每次把網頁內容送進模型前,都應該先用不同方式解碼同一段文字,檢查裡面是否有惡意意圖或刻意隱藏的指令,再決定能不能放進模型輸入。
AID-H-019.004
Intent-Based Dynamic Capability Scoping
極高
就算前面的清理和偵測沒有攔下藏在網頁裡的提示詞,它也不該放大 agent 的權限。原本只是網頁摘要或廣告審核的工作,不應該因為頁面要求,就突然取得購買商品、付款、核准詐騙廣告、刪除資料或執行 shell 命令的能力。
AID-H-020.001
URL Normalization & Allowlist Filtering
Unit 42 的樣本裡,有人把指令藏在 URL fragment、付款連結,或模型輸出後可能被點開的連結裡。agent 要點開、預覽或把資料送到某個網址前,系統應先把網址解析成標準格式,確認目的地在允許清單內。
AID-H-019.005
Value-Level Capability Metadata & Data Flow Sink Enforcement
高影響案例通常不是模型多說了一句話,而是資料或動作流到不該去的地方,例如付款網址、外部網頁目的地、後端資料庫,或會洩漏提示詞的輸出。凡是從網頁內容算出來、抽出來或組出來的值,都要保留「來自不可信網頁」這個來源標記。除非政策明確允許,這些高機敏資料不應該被送到對外 HTTP、付款流程、資料庫寫入,或任何可能把內容揭露出去的輸出位置。
AID-H-002.002
Inference-Time Prompt & Input Validation
網頁文字真正變危險,是它被組進推論請求的那一刻。系統應該驗證最後送進模型的提示詞內容,並把擷取來的網頁內容標成不可信資料。從網頁抓來的內容只能當資料;如果裡面出現「請忽略前面規則」這類像指令的文字,系統要把它擋下來。頁面如果試圖改寫開發者指令或角色優先順序,也應該預設拒絕。
AID-H-018.007
Dual-LLM Isolation Pattern
這篇文章的根本問題,是模型很難在同一段上下文裡分清楚什麼是指令、什麼是資料。可以讓隔離模型讀原始網頁,只輸出型別明確的摘要;真正持有工具權限的高權限模型,只接收這份結構化結果。這樣能把藏在網頁裡的指令隔離在不能動手的元件裡。
AID-D-003.003
Agentic Tool Use & Action Policy Monitoring
像是未授權交易、刪除資料、發出阻斷服務命令,或讓惡意廣告通過審核,這些結果最後都會在 agent 準備執行動作時露出來。工具使用監控應該在執行前比對原始使用者意圖、網頁信任等級、工具風險類別,以及最近是否出現提示詞注入訊號。
AID-D-003.002
Sensitive Information & Data Leakage Detection
有些樣本目標是透過看起來正常的模型輸出,慢慢把敏感資訊或系統提示詞帶出去。輸出掃描應該在回應被顯示、寫進記錄、交給下一個工具,或嵌進連結與請求前,先偵測 secrets、PII、內部指令,以及看起來像在刻意列出機敏內容的結構化文字。

身為資安防禦者,我們應該這麼做

  • 盤點所有會攝入公開網頁內容、再交給 LLM 做判斷、摘要、排序、審核或動作的產品路徑,包括 agent、爬蟲、瀏覽器助理、廣告審核系統、安全掃描器和 copilot。
  • 在推論前先把網頁內容正規化並降權。把 scripts、CSS 隱藏區塊、畫面外文字、data attribute、SVG 文字、URL fragment、執行期解碼插入的內容和 OCR 取得的文字,拆成有來源標籤的欄位,不要混成一大段原始文字直接丟給模型。
  • 在組裝上下文前加入 IDPI 專用偵測:解碼 Base64、URL 編碼、HTML entity、多層編碼、Unicode 控制字元、同形異字、把惡意指令拆成多段、多語指令,以及假冒系統或管理者口吻的指令。
  • 把每個網頁攝入工作階段能做的事限制清楚。摘要器就只能摘要,廣告審核器就只能分類;它們不應該因為頁面寫了指令,就能購買、捐款、寫資料庫、跑命令或揭露內部資料。
  • 把外部網址、付款連結、資料庫寫入、email、檔案匯出和 Markdown 連結呈現,都當成資料離開系統前要檢查的點。資料流向控管要設在這些出口點,不只設在模型提示詞上。
  • 把 Unit 42 的分類做成回歸測試。準備無害測試頁,放入隱藏 CSS、屬性偽裝文字、編碼後的惡意內容、社交工程指令,以及假的付款或刪除要求,持續測到整條鏈在多個層次都會失敗為止。

結論

這份報告重要的地方在於,它顯示網頁型 IDPI 已經從研究展示走進真實、雜亂的網路遙測。這不是一句神奇提示詞的問題,而是網頁內容怎麼被擷取、怎麼被解析、怎麼放進模型上下文、agent 手上有哪些權限,以及模型輸出最後能觸發哪些動作一起失守的問題。AIDEFEND  對應到的防線包括:把不可信 HTML 降權處理、偵測混淆內容、在推論時再次驗證、限制 agent 能做的事、控管資料能不能流到外部出口、隔離執行環境,以及監控 agent 動作。實務目標很清楚:讓 agent 能安全利用公開網頁內容,但不要讓整個 web 變成控制 agent 的通道。