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

SQL 字串拼接驗證的致命漏洞:SQL Injection 原理與防禦實務

     編輯:關於SqlServer

漏洞程式碼範例

Sql = "SELECT * FROM Users WHERE Username = '" + name + "' AND Password = '" + passWord + "'";

若使用者輸入帳號:111'or'1=1,密碼任意(如 aaaa),實際執行 SQL 變為:

SELECT * FROM Users WHERE Username = '111'or'1=1' AND Password = 'aaaa'

因 1=1 永真,OR 短路導致密碼驗證被繞過,任意密碼皆能登入。

真實案例

知名網路遊戲《笑傲江湖》早期版本即存在此漏洞,暴露出開發者安全意識薄弱。一個微小疏漏可能造成嚴重後果。

防禦措施

  1. 參數化查詢(最推薦):使用 SqlParameter、OleDbParameter 等,徹底分離程式碼與資料。
  2. 輸入驗證與清理:拒絕單引號、分號、註解符號(--、/* */)等特殊字元;採用白名單驗證(如帳號僅允許英數字)。
  3. 最小權限原則:應用程式連線資料庫帳號僅授予必要權限(如僅 SELECT/INSERT/UPDATE,拒絕 DROP、xp_cmdshell 等)。
  4. 錯誤訊息不外露:生產環境關閉詳細錯誤回饋,避免攻擊者偵察資料庫結構。
  5. 使用預存程序:封裝邏輯於伺服器端,減少動態 SQL 拼接。

開發者心得

安全非功能性需求,而是系統設計的基石。每一行拼接 SQL 的程式碼都是潛在風險點,請養成參數化查詢的肌肉記憶。

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