Day 28|Improper Output Handling 是什麼?
前面介紹了 Vector 與 Embedding 的安全問題,今天來看另一個很重要的概念:Improper Output Handling(不當輸出處理)。
簡單來說,就是:
LLM 產生的內容,在沒有經過適當驗證、過濾或處理的情況下,就直接交給其他系統使用。
這裡最重要的觀念是:
LLM 的輸出不能直接當成可信任的資料。
例如,一個 Application 讓 AI 幫忙產生資料庫查詢、HTML、程式碼,甚至操作系統指令。
正常情況下,流程可能是:
User → LLM → Output → Application → 執行
問題就在於最後這個 Output → Application。
如果 Application 看到 AI 產生的內容,就直接拿去執行,等於把原本由 AI 產生的內容當成了可信任的指令。
而 LLM 的輸出其實可能受到使用者 Prompt、外部文件,甚至 Prompt Injection 的影響。OWASP 因此建議把模型輸出視為不可信資料,在送往下游系統前進行適當驗證與處理。
這跟一般的 Input Validation 有什麼不同?
傳統 Web Application 我們都知道:
User Input → Validation → Application
因為使用者輸入不可信。
LLM Application 則多了一層:
User → LLM → LLM Output → Application
問題是,很多開發者會覺得:
「這不是使用者輸入,是 AI 產生的,所以應該比較安全吧?」
其實剛好相反。
AI 產生的內容同樣不能直接信任。
例如 AI 產生一段 SQL,不能因為它是 AI 產生的,就直接送進 Database;AI 產生 HTML,也不能直接假設裡面不會有危險內容。
所以 Improper Output Handling 的核心其實就是:
不要因為內容是 AI 產生的,就跳過原本應該存在的安全檢查。
LLM 可以負責「產生建議」或「產生內容」,但在它的輸出真正進入 Browser、Database、Shell、API 或其他系統之前,Application 仍然需要進行適當的驗證與處理。