為了防止sql注入攻擊,首先要明白sql注入攻擊是什么?然后再針對(duì)sql攻擊特性去防止。
sql注入攻擊就是通過(guò)把SQL命令插入到Web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。
其實(shí),我們可以簡(jiǎn)單的理解SQL注入為:未對(duì)用戶輸入進(jìn)行過(guò)濾,導(dǎo)致用戶的一些輸入在程序執(zhí)行時(shí),當(dāng)做SQL語(yǔ)句的一部分進(jìn)行執(zhí)行,從而針對(duì)一些敏感操作:OR 1=1 或者 WHERE 1=1 這種條件的加入,使得我們本身的SQL邏輯被跳過(guò)執(zhí)行。
從sql注入攻擊的特性中,我們發(fā)現(xiàn)sql攻擊主要是對(duì)sql語(yǔ)句或特定sql關(guān)鍵詞進(jìn)行改寫,達(dá)到一種欺騙程序的方式,由此,我們只需要把這種欺騙限制的語(yǔ)法進(jìn)行規(guī)范話控制,就能有效的防止sql注入。
那么在PHP中,可以通過(guò)簡(jiǎn)單的四種方法來(lái)有效防止SQL注入:
1、對(duì)用戶的輸入進(jìn)行過(guò)濾處理后,在進(jìn)行操作,如:addslashes()方法或者開(kāi)啟magic_quotes_gpc方法;
2、針對(duì)獲取的數(shù)值型數(shù)據(jù),進(jìn)行二次轉(zhuǎn)換,如intval(),floatval();
3、所有需進(jìn)行數(shù)據(jù)庫(kù)查詢的變量都使用單引號(hào)(')包圍;
4、使用PDO或mysqli來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。