跳轉到內容

網頁應用安全指南/截斷攻擊、修剪攻擊

來自華夏公益教科書,開放的書籍,開放的世界

截斷攻擊、修剪攻擊

如果截斷影響比較(例如,在截斷之前檢查使用者是否在黑名單中,然後截斷名稱以執行登入),那麼截斷輸入可能會出現問題。如果 SQL 查詢超過一定長度,則可能會被截斷。這可用於執行具有明顯不同含義的查詢(例如,截斷 WHERE 子句的一部分)。字串也可以自動修剪(刪除前導/尾隨空格),導致相同漏洞(例如,檢查輸入 "eviluser␣" 是否在黑名單中,然後登入 "eviluser"). SQL 可能會自動進行此類修剪。

為了防止這種型別的攻擊

  • 避免截斷輸入。將過長輸入視為錯誤。
  • 如果截斷是必要的,請確保在截斷後檢查值,並且只使用截斷後的值
  • 確保修剪不會發生,或者檢查是一致的
  • 引入長度檢查
    • 關注由於編碼造成的不同長度
  • 透過設定適當的 SQL MODE,確保 SQL 將截斷的查詢視為錯誤SQL 模式

基本原理

避免截斷確保不會出現任何問題。如果應用截斷,則在截斷後執行所有必要的檢查並僅使用截斷後的值,這等同於在截斷狀態下接收值。相同的規則適用於修剪。長度檢查可以防止由於長度限制而導致意外截斷。需要考慮編碼,因為 UTF-8 字串的位元組長度和字元長度可能不同。將 SQL MODE 設定為使截斷導致錯誤,可以確保截斷不能用於修改查詢。但是,由此產生的錯誤仍然會導致查詢意外失敗,這應該以安全的方式處理。

華夏公益教科書