使用者輸入 a' OR 't'='t 導致 WHERE name = 'a' OR 't'='t' 恆真,繞過驗證。更嚴重者可注入多條語句:a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%
數值欄位未驗證型別,輸入 1; DROP TABLE users 直接拼接執行。
如 MySQL mysql_real_escape_string() 編碼漏洞,允許繞過轉義。
頁面不直接顯示資料,但根據邏輯判斷結果回應不同內容。需逐位元構造語句,耗時但可自動化(如 Absinthe 工具)。
AND 1=1 正常、AND 1=2 異常,藉此確認注入點。
SELECT 1/0 FROM users WHERE username='Ralph',若用戶存在觸發除零錯誤,洩露資訊。
注入長時間執行語句(如 WAITFOR DELAY),依頁面載入時間判斷邏輯真偽。
木馬透過搜尋引擎尋找 ASP 表單漏洞站點,批量發動注入,植入惡意 JavaScript,誘導訪客下載竊密軟體。
PreparedStatement、Parameterized Query,輸入視為參數而非 SQL 片段。PreparedStatement prep = conn.prepareStatement(
"SELECT * FROM users WHERE password = ?");
prep.setString(1, pwd);
強制參數化機制(如 H2 資料庫)可在執行期拒絕拼接式 SQL。EXEC()、sp_executesql 動態 SQL),減少攻擊面。SQL 注入防禦沒有銀彈,需結合「參數化查詢」核心防線、「最小權限原則」資料庫帳號、「輸入驗證」前端攔截、「弱點掃描」持續檢測、「安全開發流程」源頭治理,構建纵深防禦體系。