MySQL 注入是指攻擊者使用注入攻擊手段,直接或間接地將惡意代碼插入到應(yīng)用程序中的 SQL 語句中,并使應(yīng)用程序?qū)阂獯a當(dāng)做合法代碼來執(zhí)行從而實(shí)現(xiàn)攻擊目標(biāo)的一種攻擊方式。下面是一個(gè) MySQL 注入的實(shí)例:
SELECT * FROM users WHERE username = '{$_POST['username']}' AND password = '{$_POST['password']}'
這是一個(gè)登錄驗(yàn)證的 SQL 語句,在輸入用戶名和密碼后,若數(shù)據(jù)庫中存在此用戶,則允許用戶登錄。但是,當(dāng)攻擊者在用戶名或密碼中輸入 SQL 代碼時(shí),就可能導(dǎo)致服務(wù)端執(zhí)行惡意代碼。
SELECT * FROM users WHERE username = 'admin' or 1=1;--' AND password = 'password'
在此語句中,攻擊者將用戶名設(shè)置為 "admin",并使用 "or 1=1" 條件注入語句,該語句將總是返回真值,從而導(dǎo)致 SQL 語句返回所有用戶信息。攻擊者在語句結(jié)尾處添加了 "--" 注釋符,這將注釋掉語句之后的所有內(nèi)容,從而防止程序報(bào)錯(cuò)。
這種注入方式可能會使攻擊者獲得用戶賬戶、密碼等敏感信息。為了預(yù)防 MySQL 注入攻擊,程序開發(fā)時(shí)應(yīng)該在輸入的值上進(jìn)行過濾和轉(zhuǎn)義,或使用參數(shù)化查詢。