SQL 注入本質
應用未驗證使用者輸入,直接拼接 SQL 字串。攻擊者在輸入欄位/URL 參數注入惡意 SQL 片段,竊取/竄改/刪除資料,甚至提權至系統管理員。
常見防禦誤區
- 通用防注入系統 (字串過濾):僅攔截關鍵字,SQL 注入分析器 (自動化工具) 可繞過關鍵字檢測,透過編碼、註釋、HPP 等技術自動探測注入點並提取資料
- 隱藏管理員帳號名稱:分析器針對**權限欄位 (如 flag=1)** 而非帳號名稱,改名無效
進階誘餌策略 (資料庫層)
- 擴大權限欄位長度:
ALTER TABLE admins ALTER COLUMN username varchar(255), password varchar(255)
- 建立誘餌管理員 (ID=1):權限最高,密碼填入 **>1000 個中文字元** (超長字串)
- 真實管理員放在深層 ID (如 549):正常業務邏輯查詢時以 ID 或其他條件定位,不受影響
原理:自動化工具嘗試暴力破解/字典攻擊誘餌帳號時,超長密碼導致資源耗盡、超時或崩潰。
前端攔截 (應用層,必要補強)
- 登入頁 **密碼欄位 maxlength 限制** (如 20 字元),誘餌帳號超長密碼直接被前端擋下
- 真實管理員帳號密碼正常長度,不受限制
根本解決方案 (必須實施)
- 全面參數化查詢:
SqlParameter / PreparedStatement / ORM,杜絕字串拼接
- 最小權限資料庫帳戶:Web 應用僅擁有必要 CRUD 權限,無
sysadmin/db_owner
- 錯誤訊息不回顯給前端:自定義錯誤頁,記錄詳細日誌供內部排查
- WAF / 參數化防火牢:雲端 WAF (AWS/Azure/Cloudflare) 或開源 ModSecurity 規則集
- 定期滲透測試:SQLMap、OWASP ZAP 自動化掃描
誘餌策略屬於**緩解措施**,非根治。**參數化查詢 + 最小權限 + WAF + 定期掃描** 才是企業級防禦標準。舊系統若無法立即重構,可先部署誘餌 + WAF 爭取重構時間窗口。