欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql嵌套查詢sql,參數(shù)化查詢?yōu)槭裁茨軌蚍乐筍QL注入

錢淋西2年前32瀏覽0評論
mysql嵌套查詢sql,參數(shù)化查詢?yōu)槭裁茨軌蚍乐筍QL注入?

一、為什么會有sql注入

是用戶輸入的內(nèi)容在服務(wù)器中能夠被拼接查詢,從而輸出惡意用戶期望的內(nèi)容,那么要防止SQL注入,就是阻止惡意用戶輸入的惡意信息被數(shù)據(jù)庫執(zhí)行并且輸出。

1. 對于數(shù)字型注入,不需要單引號個的情況下

可以將payload跟在參數(shù)后邊,不受過濾和轉(zhuǎn)義的影響

$id=$_POST['id'];

$sql = select username from users where id= $id union select database();

2. 寬字節(jié)注入(但是要使用gbk編碼)

在使用gbk編碼時,系統(tǒng)會認(rèn)為兩個字符是一個漢字的編碼(前一個字符必須大于128)。

輸入%df%27時首先經(jīng)過上面提到的單引號轉(zhuǎn)義變成了%df%5c%27(%5c是反斜杠\),之后在數(shù)據(jù)庫查詢前由于使用了GBK多字節(jié)編碼,即在漢字編碼范圍內(nèi)兩個字節(jié)會被編碼為一個漢字。然后MySQL服務(wù)器會對查詢語句進(jìn)行GBK編碼即%df%5c轉(zhuǎn)換成了漢字“運(yùn)”,而單引號逃逸了出來

3. 使用編碼的形式

查詢的數(shù)據(jù)在經(jīng)過webserver時會被解碼一次

id=1%2527 --->webserver --> id=1%27 --> urldecode--> 1'

4. 二次注入

二次注入漏洞字面上理解可能就是結(jié)合兩個注入漏洞點(diǎn)實(shí)現(xiàn)sql注入的目的,但是這其中還有幾個細(xì)節(jié)需要講解一下。首先,第一個注入點(diǎn)因?yàn)榻?jīng)過過濾處理所以無法觸發(fā)SQL注入漏洞,比如addslashes函數(shù),將單引號等字符轉(zhuǎn)義變成\’。但是存進(jìn)數(shù)據(jù)庫后,數(shù)據(jù)又被還原了,也就是反斜杠沒了,在這種情況下,如果能發(fā)現(xiàn)一個新的注入同時引用了被插入了的數(shù)據(jù)庫數(shù)據(jù),就可以實(shí)現(xiàn)閉合新發(fā)現(xiàn)的注入漏洞引發(fā)漏洞。

二、如何防止SQL注入

通過上邊的四種方式完美的繞過了反斜杠和單引號轉(zhuǎn)義是否能防止SQL注入的問題,哪如何能防止SQL注入呢?

1、所有的查詢語句都使用數(shù)據(jù)庫提供的參數(shù)化查詢接口,參數(shù)化的語句使用參數(shù)而不是將用戶輸入變量嵌入到SQL語句中。當(dāng)前幾乎所有的數(shù)據(jù)庫系統(tǒng)都提供了參數(shù)化SQL語句執(zhí)行接口,使用此接口可以非常有效的防止SQL注入攻擊。

2、對進(jìn)入數(shù)據(jù)庫的特殊字符(’”<>&*;等)進(jìn)行轉(zhuǎn)義處理,或編碼轉(zhuǎn)換。

3、確認(rèn)每種數(shù)據(jù)的類型,比如數(shù)字型的數(shù)據(jù)就必須是數(shù)字,數(shù)據(jù)庫中的存儲字段必須對應(yīng)為int型。

4、數(shù)據(jù)長度應(yīng)該嚴(yán)格規(guī)定,能在一定程度上防止比較長的SQL注入語句無法正確執(zhí)行。

5、網(wǎng)站每個數(shù)據(jù)層的編碼統(tǒng)一,建議全部使用UTF-8編碼,上下層編碼不一致有可能導(dǎo)致一些過濾模型被繞過。

6、嚴(yán)格限制網(wǎng)站用戶的數(shù)據(jù)庫的操作權(quán)限,給此用戶提供僅僅能夠滿足其工作的權(quán)限,從而最大限度的減少注入攻擊對數(shù)據(jù)庫的危害。

7、避免網(wǎng)站顯示SQL錯誤信息,比如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進(jìn)行一些判斷。