首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ASP.NET 防範 SQL 注入攻擊完整指南(二):八大實戰防禦策略與最佳實務

     編輯:關於SqlServer

承接上篇,本文提供八大層層疊加的防禦策略,從輸入過濾、參數化、權限最小化到加密儲存,構建纵深防禦體系。

八大防禦策略

1. 動態 SQL 輸入淨化(最基礎、最脆弱)

  • 單引號雙化: ' → '',破壞注入語法結構。
  • 移除註釋符號: --、/* */、#,防止截斷後續 SQL。
  • 限制資料庫帳號權限: 查詢、新增、修改、刪除使用不同帳號,SELECT 帳號無 INSERT/UPDATE/DELETE 權限。

2. 全面採用預存程序與參數化查詢(核心防線)

  • 參數傳遞機制將資料與程式碼徹底分離,單引號、註釋符號視為字面值而非 SQL 語法。
  • 資料庫權限僅授與 EXECUTE 特定預存程序,不授與直接存取資料表權限。
  • 所有使用者輸入受限於預存程序定義的參數型別、長度、範圍。

3. 限制表單/查詢字串輸入長度

  • 帳號最長 10 字元 → 前端 maxlength="10"、後端 If Len(input) > 10 Then Reject。
  • 大幅增加攻擊者構造惡意 Payload 的難度(空間不足)。

4. 輸入合法性驗證(白名單機制)

  • 客戶端驗證: 使用 RegularExpressionValidator 等內建驗證控制項,自動產生 JavaScript 提升使用者體驗。
  • 伺服器端驗證(必要): 客戶端可繞過,伺服器端必須重新驗證。可複用驗證控制項的 ServerValidate 事件或自訂 CustomValidator。
  • 白名單範例:帳號僅允許英數字、底線;Email 符合 RFC 格式;身分證符合格式與校驗碼。

5. 敏感資料加密儲存(資料層防護)

  • 密碼以 FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1") 雜湊儲存(建議改用 PBKDF2/BCrypt/Argon2)。
  • 驗證時對使用者輸入同樣雜湊後比對,輸入資料不再具備 SQL 語法意義,等同「消毒」處理。

6. 查詢結果筆數檢核

  • 預期回傳單筆(如登入驗證),若 DataReader.Read() 讀到多筆 → 視為異常拒絕。
  • 防止 OR '1'='1 導致多筆匹配繞過驗證。

7. 錯誤訊息最小化

  • 生產環境關閉詳細錯誤頁面(customErrors mode="RemoteOnly"),避免洩露資料庫結構、SQL 片段、堆疊追蹤資訊。

8. 定期安全性測試與程式碼審查

  • 自動化掃描工具(OWASP ZAP、SQLMap)定期掃描。
  • 程式碼審查檢查清單:所有資料存取是否參數化、權限是否最小化、錯誤處理是否洩露資訊。

總結:防禦優先順序

  1. 參數化查詢 / 預存程序(根治)
  2. 最小權限資料庫帳號(限制損害範圍)
  3. 伺服器端白名單驗證(攔截惡意輸入)
  4. 輸入長度限制(增加攻擊成本)
  5. 敏感資料加密儲存(資料層最後防線)
  6. 錯誤訊息最小化(減少情報洩露)
  7. 動態 SQL 淨化(僅作為舊代碼緩解措施)
  8. 定期滲透測試(持續驗證)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved