SQL 注入發生於攻擊者將惡意 SQL 片段插入應用程式查詢中。典型查詢:
SELECT id, forename, surname FROM authors WHERE forename = 'john' AND surname = 'smith';
若輸入 forename = 'jo'hn',單引號截斷導致語法錯誤;若輸入 forename = 'jo'; DROP TABLE authors--,配合註解符 -- 可執行任意命令。
SELECT * FROM authors WHERE id = 1234;
攻擊者輸入 1234; DROP TABLE authors-- 即可注入,因數值無單引號包裹,過濾單引號無效。
Replace(\', \'\'))無法防禦數值型注入、編碼繞過、二次注入。下篇將深入探討進階注入技術:預存程序注入、二次注入、擴展預存程式滥用、xp_cmdshell 奪取系統控制權等。