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

三步驟徹底防禦 SQL Injection:從輸入驗證到誘餌帳號實戰策略

     編輯:關於SqlServer

SQL 注入仍是 Web 應用頭號威脅。本文提出三層防禦體系:通用防注入模組 擋手動測試 → 欺騙自動化掃描器 以高權限誘餌帳號拖垮分析器 → 登入頁面長度限制 封殺誘餌帳號實際登入。配合資料表結構調整,零成本大幅提升安全性。

威脅原理回顧

駭客在輸入欄位 (URL、表單) 置入惡意 SQL 片段,利用程式未驗證輸入,竄改查詢邏輯,繞過驗證、竊取資料、植入木馬、提權至系統管理員。

第一步:部署通用防注入模組 (擋手動)

  • 下載成熟開源防注入類庫 (如 ASP.NET SqlInjectionFilter、PHP mysql_real_escape_string 封裝)。
  • 於全站入口 (Global.asax、common.inc) 引入,攔截含 ', --, ;, UNION, SELECT 等特徵的請求。
  • 局限:自動化掃描器 (如 SQLMap、Havij) 可繞過靜態規則,需第二層防禦。

第二步:誘餌帳號陷阱 (拖垮掃描器)

洞察:掃描器鎖定「高權限旗標」(如 flag=1, is_admin=1) 而非特定帳號名。

  1. 修改資料表:管理員帳號/密碼欄位改為 VARCHAR(255) 或 TEXT。
  2. 植入誘餌:ID=1 放入 admin / 超過 1000 字中文長字串 (真實高權限帳號)。
  3. 真實帳號隱藏:ID=549 放入真正管理員 real_admin / 強密碼。

效果:掃描器優先嘗試 ID=1,龐大字串導致字典窮舉、暴力破解資源耗盡、甚至掃描器崩潰。

第三步:登入頁長度限制 (封殺誘餌實際登入)


  • 前端 maxlength + 後端 IF LEN(@user)>20 RETURN 雙重驗證。
  • 誘餌帳號密碼超長,無法通過登入頁驗證;真實帳號短密碼正常登入。

補充建議 (纵深防禦)

  1. 參數化查詢 / 預存程序:從根源消除注入可能 (首選方案)。
  2. 最小權限原則:Web 連線帳號僅擁有 EXEC 特定 SP 權限,無 SELECT/INSERT/UPDATE/DELETE 直接表權限。
  3. 錯誤訊息不外洩:自訂錯誤頁,隱藏 SQL 錯誤細節。
  4. WAF / 定期掃描:部署 ModSecurity 或雲端 WAF,定期跑 SQLMap 自測。

總結

三步驟 (通用模組 + 誘餌帳號 + 長度限制) 針對「手動測試、自動掃描、誘餌被盜用」三個攻擊面,成本極低、即時生效。但參數化查詢才是根本解法,請優先重構代碼。

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