首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 注入攻擊類型全解析與防禦實戰指南

     編輯:MySQL 資料庫相關知識

七大 SQL 注入攻擊類型

1. 未正確過濾轉義字元

使用者輸入 a' OR 't'='t 導致 WHERE name = 'a' OR 't'='t' 恆真,繞過驗證。更嚴重者可注入多條語句:a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%

2. 型別處理不當

數值欄位未驗證型別,輸入 1; DROP TABLE users 直接拼接執行。

3. 資料庫伺服器本身漏洞

如 MySQL mysql_real_escape_string() 編碼漏洞,允許繞過轉義。

4. 盲目注入

頁面不直接顯示資料,但根據邏輯判斷結果回應不同內容。需逐位元構造語句,耗時但可自動化(如 Absinthe 工具)。

5. 條件回應

AND 1=1 正常、AND 1=2 異常,藉此確認注入點。

6. 條件錯誤

SELECT 1/0 FROM users WHERE username='Ralph',若用戶存在觸發除零錯誤,洩露資訊。

7. 時間延遲

注入長時間執行語句(如 WAITFOR DELAY),依頁面載入時間判斷邏輯真偽。

新型攻擊趨勢:ASP.NET 殭屍網路自動化掃描

木馬透過搜尋引擎尋找 ASP 表單漏洞站點,批量發動注入,植入惡意 JavaScript,誘導訪客下載竊密軟體。

五大防禦與檢查手段

  1. 參數化查詢(核心防禦)
    使用 PreparedStatement、Parameterized Query,輸入視為參數而非 SQL 片段。
    Java 範例:
    PreparedStatement prep = conn.prepareStatement(
        "SELECT * FROM users WHERE password = ?");
    prep.setString(1, pwd);
    強制參數化機制(如 H2 資料庫)可在執行期拒絕拼接式 SQL。
  2. 避免使用解釋執行機制(如 EXEC()、sp_executesql 動態 SQL),減少攻擊面。
  3. 統一輸入驗證與錯誤訊息最小化
    驗證長度、型別、格式、業務規則;生產環境隱藏詳細錯誤堆疊,避免洩露結構資訊。
  4. 部署專業弱點掃描工具
    如 Acunetix WVS,專門偵測 SQL 注入、XSS 等 Web 漏洞,定期掃描、持續更新特徵庫。
  5. 全生命週期程式碼安全檢查
    開發階段靜態分析(SAST)→ 測試階段動態掃描(DAST)→ 上線後持續監控與修補。

總結

SQL 注入防禦沒有銀彈,需結合「參數化查詢」核心防線、「最小權限原則」資料庫帳號、「輸入驗證」前端攔截、「弱點掃描」持續檢測、「安全開發流程」源頭治理,構建纵深防禦體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved