Day 29|Improper Output Handling 要怎麼防?
上一篇提到,LLM 的輸出不能直接當成可信任的資料。
那麼,實際上要怎麼降低這個風險?
最基本的原則就是:
不管內容是不是 AI 產生的,都要經過安全檢查。
不要因為 LLM 回傳的是 SQL、HTML 或程式碼,就直接交給 Database、Browser 或 Shell 執行。OWASP 建議對模型輸出採取類似處理使用者輸入的 Zero Trust 思維。
不同地方需要不同的處理方式。
例如:
顯示在網頁 → HTML / JavaScript Encoding
送進 Database → Parameterized Query
寫入檔案 → Path Validation
執行指令 → 不應直接把模型輸出當成 Shell Command
不能使用同一套過濾規則處理所有情境。
如果 LLM 的輸出會進一步呼叫 API 或 Tool,就應該檢查:
這個操作真的被允許嗎?
例如 AI 產生了一個刪除資料的指令,Application 仍然應該確認權限、參數與前置條件,而不是直接執行。
像是刪除資料、部署程式、修改系統設定等操作,可以加入 Human-in-the-Loop。
讓 AI 負責提出建議,但真正執行之前,再由人或其他安全機制確認。
如果模型突然大量產生 SQL、Shell Command 或其他異常輸出,系統應該能夠發現。
因此除了驗證輸出,也要留下適當的 Log、監控與異常偵測。
所以 Improper Output Handling 最重要的觀念其實很簡單:
LLM 可以產生內容,但不能因此取得「直接執行」的信任。
不論是 Browser、Database、API、Terminal 還是其他系統,模型輸出進入下一個系統之前,都應該重新進行適當的驗證與處理。