您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)網(wǎng)站防止sql注入的方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
防sql注入,是一種網(wǎng)站防止黑客攻擊的方式。網(wǎng)站要怎么防范最最常見SQL注入式攻擊呢,我們先從SQL注入式攻擊的原理來說起。
1.沒有正確過濾特殊字符不能防止sql注入
例如單引號(hào)和分號(hào)如果你的sql語句是這樣,又沒過濾“’”單引號(hào):"SELECT*FROMtablesWHEREparam='"+RequestString+"';"攻擊者將用戶名變量(即RequestString)設(shè)置為:a'or't'='t
此時(shí)原始語句發(fā)生了變化:SELECT*FROMtablesWHEREparam='a'OR't'='t';
如果這種代碼被用于一個(gè)認(rèn)證過程,那么這個(gè)例子就能夠強(qiáng)迫選擇一個(gè)合法的用戶名,因?yàn)橘x值't'='t永遠(yuǎn)是正確的。這種方式是跳過身份認(rèn)證的最簡(jiǎn)單手段
再配合“;”分號(hào)可以進(jìn)行更多的SQL注入攻擊";"分號(hào)用來執(zhí)行多個(gè)語句。下面語句中的RequestString的值將會(huì)導(dǎo)致刪除“tables”表,又可以從“dataTables”表中選擇所有的數(shù)據(jù)(實(shí)際上就是透露了每一個(gè)用戶的信息)。a';DROPTABLEtables;SELECT*FROMdataTablesWHEREparamLIKE'%
這就將最終的SQL語句變成下面這個(gè)樣子:SELECT*FROMtablesWHEREparam='a';DROPTABLEtables;SELECT*FROMdataTablesWHEREparamLIKE'%';
通過這種原理可以執(zhí)行很多很多攻擊了。
2.不正確處理變量類型不能防止sql注入
如果一個(gè)用戶提供的字段并非一個(gè)強(qiáng)類型,或者沒有實(shí)施類型強(qiáng)制,就會(huì)發(fā)生這種形式的攻擊。當(dāng)在一個(gè)SQL語句中使用一個(gè)數(shù)字字段時(shí),如果程序員沒有檢查用戶輸入的合法性(是否為數(shù)字型)就會(huì)發(fā)生這種攻擊。
例如:“SELECT*FROMtablesWHEREid="+RequestID+";"
從這個(gè)語句可以看出,作者希望RequestID是一個(gè)數(shù)字。不過,如果終端用戶選擇一個(gè)字符串,就繞過了對(duì)轉(zhuǎn)義字符的需要。例如,將RequestID設(shè)置為1;DROPTABLEtables就不需要上面說的“‘”單引號(hào)了,照樣可以進(jìn)行攻擊:會(huì)將“tables”表從數(shù)據(jù)庫中刪除,SQL語句變成:SELECT*FROMDATAWHEREid=1;DROPTABLEusers。
感謝各位的閱讀!關(guān)于“網(wǎng)站防止sql注入的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。