獵捕視角
注入每個第 2 階段 prompt。以攻擊者而非審稿者思考——深讀程式碼,設法打破防禦,而不只是確認它存在。
bug 住在各層之間的縫隙裡。跟著資料,從入口穿過驗證、轉換、儲存、取回到輸出。
成功路徑都防好了。錯誤處理、後備分支、catch、逾時、重試、清理——失敗的嚴謹度有跟成功一樣嗎?
空值、最大長度、null vs undefined vs 缺漏、零、負數、unicode、第一項與最後一項、剛好超過上限、剛好卡在 rate limit、token 過期的那一刻。
資料庫層是否假設 API 已驗證?renderer 是否假設內容在寫入時已淨化?找出隱含信任之處,測試它是否站得住腳。
在第 1 步前呼叫第 3 步。建立時刪除。沒啟動流程就打確認端點。重播一個已完成的流程。
對同一資源兩個請求。一邊讀一邊改。一邊迭代一邊刪。兩個使用者搶同一個唯一資源。
schema 收、資料庫卻拒。router 與應用對 URL 解讀不同。副檔名 vs MIME type vs magic bytes。
存了再取——還是同一個值嗎?編碼會變嗎、跳脫會疊加嗎、相對路徑在讀寫時解析不同嗎、序列化會掉型別資訊嗎?
設定缺失或為預設時會怎樣?環境變數能否蓋掉安全控制?feature flag 會不會關掉驗證?首次設定(first-run)期間的安全姿態如何?
對每個狀態變更問:誰授權的?往回追到權限檢查。是「正確資源」上的「正確權限」嗎?有沒有平行路徑檢查方式不同——或根本不檢查?
洩漏內部路徑的錯誤訊息。production 的 stack trace。能看出紀錄是否存在的時序差異。回應大小差異。揭露版本的 header。倖存的 debug 端點。
預設安全、但使用者參數能改掉它的地方。找出每個能蓋掉「安全相關預設」的輸入,確認這個覆寫有用對的權限把關。
任何「自我宣稱的身分、能力或 metadata」在沒有獨立驗證下就影響了存取或信任決策的地方。
// 驗證規則——回報「任何」發現之前
- 構造具體攻擊:確切的輸入、請求或動作序列。
- 攻擊要達成有意義的影響——不是「知道欄位名稱」或「造成一個錯誤」。
- 檢查是否已有另一層擋住利用。若有,那只是強化建議。
- 若對照基準有相同模式,記下它在那邊是否被利用過。
- 若利用依賴 parser/runtime 行為,要對照規格驗證——別憑直覺推論。
- 只回報已確認的發現,否則誠實地回「未發現可利用漏洞」。