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

SQL Server 應用程式注入攻擊原理與防禦(一):基礎注入、數值型注入與編碼繞過

     編輯:關於SqlServer

SQL 注入發生於攻擊者將惡意 SQL 片段插入應用程式查詢中。典型查詢:

SELECT id, forename, surname FROM authors WHERE forename = 'john' AND surname = 'smith';

若輸入 forename = 'jo'hn',單引號截斷導致語法錯誤;若輸入 forename = 'jo'; DROP TABLE authors--,配合註解符 -- 可執行任意命令。

數值型參數同樣危險

SELECT * FROM authors WHERE id = 1234;

攻擊者輸入 1234; DROP TABLE authors-- 即可注入,因數值無單引號包裹,過濾單引號無效。

防禦誤區

  • 單純過濾/轉義單引號(如 Replace(\', \'\'))無法防禦數值型注入、編碼繞過、二次注入。
  • 黑名單過濾關鍵字(select, union 等)易被大小寫、編碼、註解繞過,且誤傷正常業務(如 O'Brien)。

核心防禦原則

  1. 參數化查詢 / 預編譯語句:將資料與代碼徹底分離,ADO Command 物件 + 參數集合是標準做法。
  2. 白名單驗證:僅允許預期字元集(如密碼僅允許字母數字)。
  3. 最小權限原則:應用連線帳號僅授予必要資料表的 SELECT/INSERT/UPDATE/DELETE,拒絕 DDL、xp_cmdshell 等高危權限。
  4. 錯誤訊息不回顯:生產環境關閉詳細錯誤輸出,避免洩露結構資訊協助攻擊者構造載荷。

下篇將深入探討進階注入技術:預存程序注入、二次注入、擴展預存程式滥用、xp_cmdshell 奪取系統控制權等。

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