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

三步驟阻絕 SQL 注入漏洞:通用防禦、分析器繞過對策、蜜罐帳號誘捕

     編輯:關於SqlServer

SQL 注入仍是 Web 應用首位威脅。本文提出三層防禦體系:參數化查詢(根治)、注入分析器繞過對策(緩解)、蜜罐帳號誘捕(延遲/誤導攻擊者)。

第一層:參數化查詢——根本解決

  • 所有動態 SQL 改用參數化命令(SqlCommand.Parameters.Add、PreparedStatement.setString、ORM 內建)。
  • 拒絕字串拼接:"SELECT * FROM Users WHERE Name = '" + input + "'" ❌
  • 啟用最小權限資料庫帳號:Web 連線帳號僅擁有必要 CRUD 權限,無 sysadmin/db_owner。
  • 部署WAF(Web 應用防火牆):ModSecurity + OWASP CRS 規則集,攔截已知攻擊載荷。

第二層:對抗自動化注入分析器(如 SQLMap、Havij)

分析器特徵:不針對特定帳號(如 admin),而是掃描權限欄位(如 flag=1、role=admin)。

  1. 偽裝高權限帳號:在使用者表插入一筆 UserName='admin_trap'、Role='admin'、Password=超長中文字串(>1000 字)。
  2. 分析器嘗試暴力破解該帳號時,會因極長密碼導致字典窮盡、運算資源耗盡、甚至當機。
  3. 真實管理員帳號使用隨機高熵密碼,並限制登入失敗鎖定。

第三層:應用層輸入長度限制——最後防線

  • 登入頁表單:maxlength="32" 密碼欄位,蜜罐帳號密碼因超長無法送出。
  • 後端驗證:if (pwd.Length > 32) return BadRequest();
  • 記錄異常長度嘗試,觸發告警、封鎖 IP。

資料庫結構調整配合

ALTER TABLE Users ALTER COLUMN UserName NVARCHAR(255);
ALTER TABLE Users ALTER COLUMN Password NVARCHAR(MAX); -- 容納蜜罐超長密碼
-- 插入蜜罐帳號
INSERT INTO Users (UserName, Password, Role) VALUES
('admin_trap', REPLICATE(N'誘捕', 500), 'admin');

效果評估

防禦層阻擋對象成本殘留風險
參數化查詢所有注入開發規範極低(僅存程序動態 SQL 需注意)
蜜罐帳號自動化掃描器極低針對性手工攻擊無效
長度限制蜜罐繞過、異常嘗試極低合法長輸入被擋(需業務評估)

完整防禦清單

  • [ ] 所有查詢參數化,零字串拼接
  • [ ] Web 資料庫帳號最小權限
  • [ ] WAF 啟用並定期更新規則
  • [ ] 蜜罐高權限帳號 + 超長密碼
  • [ ] 登入頁前後端雙重長度限制
  • [ ] 錯誤訊息不回顯 SQL 細節(自定義錯誤頁)
  • [ ] 稽核登入失敗、異常查詢模式
  • [ ] 定期滲透測試驗證防禦有效性

三層防禦疊加,將 SQL 注入風險從「必中」降為「極難」,保護核心資料資產。

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