近年重大資安事件多源於 SQL Injection。本文系統歸納七大注入類型,給出開發/營運兩層面的防禦清單與工具鏈建議。
| # | 類型 | 成因 | 典型 Payload |
|---|---|---|---|
| 1 | 未過濾轉義字元 | 字串拼接 SQL,單引號未過濾 | a' OR 't'='t → WHERE name='a' OR 't'='t' 恆真繞過驗證 |
| 2 | 型別處理不當 | 數值欄位直接拼接未驗證型別 | 1; DROP TABLE users → WHERE id=1; DROP TABLE users |
| 3 | 資料庫引擎漏洞 | 如 MySQL mysql_real_escape_string() 編碼繞過 | 特定 Unicode 序列繞過過濾 |
| 4 | 盲目注入 | 無直接回顯,透過邏輯判斷 (頁面差異) 推導資料 | AND 1=1 正常 / AND 1=2 異常 → 推導位元 |
| 5 | 條件回應 | 利用邏輯判斷觸發可觀測行為 | AND (SELECT COUNT(*) FROM secret)>0 → 頁面延遲/錯誤 |
| 6 | 條件錯誤 | 強制引發錯誤洩露資訊 | AND 1/0 (除零錯誤) → 錯誤訊息含資料 |
| 7 | 時間延遲 | 注入耗時操作測量回應時間 | WAITFOR DELAY '0:0:5' → 5 秒延遲確認注入成功 |
// Java/JDBC 範例
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE pwd=?");
ps.setString(1, pwd);
參數永遠不會被解析為 SQL 指令。| 工具類別 | 代表工具 | 用途 |
|---|---|---|
| 專業掃描器 | Acunetix WVS, Burp Suite Pro, SQLMap (開源) | 自動掃描 SQLi、XSS、CSRF 等 Web 漏洞 |
| 程式碼靜態分析 | SonarQube, Fortify, Checkmarx | CI/CD 管線中攔截拼接 SQL、硬編碼密鑰等 |
| 運行時保護 (WAF/RASP) | ModSecurity, OpenRASP, Cloudflare WAF | 即時攔截惡意 Payload、虛擬補丁 |
| 資料庫審計 | SQL Server Audit, Imperva, Guardium | 記錄所有 DML/DDL、失敗登入、權限變更 |
Web 安全警鐘已響,資安重於泰山。 參數化查詢是銀彈,但需配合分層防禦 (WAF、審計、最小權限、錯誤隱藏) 形成纈深度防護體系。