萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

不當 SQL 陳述式導致系統失守:SQL Injection 經典登入繞過漏洞剖析

漏洞成因

典型登入驗證程式 (VB/ADO 範例) 拼接 SQL 字串:

sqlstr = "select * from users where name='" & Text1.Text & "' and pwd='" & Text2.Text & "'"

輸入帳號任意 (如 123),密碼輸入 a' or 'a'='a,實際執行 SQL 變為:

select * from users where name='123' and pwd='a' or 'a'='a'

'a'='a' 恆真,只要 users 表有任一記錄,RecordCount > 0 即通過驗證,繞過認證機制。

漏洞特徵

  1. 跨語言/平台: VB、Delphi、ASP、JSP 等所有拼接 SQL 的系統皆中招。
  2. 隱蔽性高: 正常功能測試無法發現,需專門滲透測試。
  3. 破壞力大: 無需猜測帳密即可登入,甚至可進一步注入命令執行。

修補方案

  1. 輸入驗證: 禁止密碼含空白、單引號等特殊字元。
  2. 密碼加密儲存: 使用不可逆雜湊 (SHA-256 等),驗證時比對雜湊值;注意演算法不可過弱,否則攻擊者可構造惡意密文。
  3. 分離驗證邏輯: 先查帳號是否存在,存在再驗證密碼,避免單一 SQL 陳述式被注入。
  4. 根本解:參數化查詢 / 預存程序: 參見文章 145749,將資料與程式碼徹底分離。

SQL Injection 歷經二十年仍屬 OWASP Top 10 首位,根治唯有參數化查詢一條路。

copyright © 萬盛學電腦網 all rights reserved