我覺得你應(yīng)該先了解下什么是sql注入,所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。 你可以了解下這個(gè)http://www.cnblogs.com/heyuquan/archive/...,sql注入是一種安全隱患,實(shí)際上跟是什么數(shù)據(jù)庫沒有直接關(guān)系,是程序過濾不完全導(dǎo)致的,簡單的注入就是用戶輸入了特殊字符,導(dǎo)致我們?cè)诖a中的sql語句變了查詢的結(jié)果也不是我們想要的!
舉個(gè)栗子:你數(shù)據(jù)庫后臺(tái)腳本寫的是delete from table where name=A ;A 是變量。那么這個(gè)地方當(dāng)參數(shù)A的值是 z or columnName=3 .這樣會(huì)有什么后果呢?腳本拼接起來就成了 delete from table where name=z or columnName=3。除了刪除name=z的數(shù)據(jù)還會(huì)刪除columnName=3的所有數(shù)據(jù)。這樣講應(yīng)該就明白了吧。
其實(shí)吧,我們現(xiàn)在寫sql直接都是預(yù)編譯sql,也就是說你想注入。。??赡苁菦]戲了
直接給你舉兩個(gè)例子吧!【】里面的代表實(shí)際sql位置傳入的參數(shù)
我們的代碼:select username,password from user where username=?
然后你傳入?yún)?shù)【123 or username is not null】
數(shù)據(jù)庫帶著你的參數(shù)傳進(jìn)去然后編譯這條sql語句
然后編譯結(jié)果就是:select username,password from user where username='123' or username is not null
最終執(zhí)行結(jié)果就是 所有的用戶都查出來了
我們的代碼:select username,password from user where username=?
然后你傳入?yún)?shù)【123 or username is not null】
然后數(shù)據(jù)庫編譯這條sql語句 select username,password from user where username=?
然后帶著你的參數(shù)放在username位置 發(fā)現(xiàn)是字符串,然后加上單引號(hào)‘’
然后執(zhí)行的sql就是:select username,password from user where username=‘123 or username is not null’
最終執(zhí)行結(jié)果就是沒有username=‘123 or username is not null’ 的
所以,這填空題你咋填都不對(duì)