我們經(jīng)?吹降哪衬嘲娴耐ㄓ梅雷⑷氲某绦蚨际菍(duì)注入的關(guān)鍵字進(jìn)行過(guò)濾的,比如“;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|'","|"”一類,不過(guò)這套程序卻對(duì)特殊字符進(jìn)行了過(guò)濾,分析下來(lái)這樣的過(guò)濾方法就安全的多了,
對(duì)特殊字符的過(guò)濾,很強(qiáng)很好用
。因?yàn)槲覀冏⑷氲臅r(shí)候構(gòu)造語(yǔ)句一定要包含上面的一些特殊字符的,大家可以想想經(jīng)典的注入語(yǔ)句,我就撿關(guān)鍵的給大家提個(gè)醒“and (select asc(mid(pass,1,1)) from [name] where id=1)>49”(不包括雙引號(hào)),這條語(yǔ)句可以猜測(cè)用戶名或者密碼,可以說(shuō)是注入ACCESS數(shù)據(jù)庫(kù)的核心語(yǔ)句了,我們看看都是什么字符觸到了RSQL()函數(shù)的痛處,有“(”,“)”,“[”,“]”,“>”那么經(jīng)過(guò)RSQL() 函數(shù)過(guò)濾之后剩下的就成了“and select ascmidpass,1,1 from name where id=149”,同學(xué)們看到了吧,這樣的語(yǔ)句是不可能猜解出什么來(lái)的。而且我們也不能通過(guò)轉(zhuǎn)換大小寫(xiě)或者用插入TAB鍵之類的方式來(lái)繞過(guò)(這不是廢話。≌l(shuí)聽(tīng)說(shuō)過(guò)給特殊字符轉(zhuǎn)換大小寫(xiě),往中間加?xùn)|西的),我也試著把特殊字符用url編碼來(lái)繞過(guò),不過(guò)后來(lái)才知道對(duì)于Request.QueryString(),Request.form()接收之后的參數(shù)會(huì)把編碼還原回原來(lái)的樣子再賦值給變量的,對(duì)于如何繞過(guò)過(guò)濾進(jìn)行注入的方法網(wǎng)上目前還沒(méi)有,也沒(méi)聽(tīng)說(shuō)過(guò)哪位牛人能擺平了,而且這個(gè)函數(shù)還可以過(guò)濾跨站語(yǔ)句的,是不是一舉多得啊,既小巧又實(shí)用(打廣告!),
電腦資料
《對(duì)特殊字符的過(guò)濾,很強(qiáng)很好用》(http://m.clearvueentertainment.com)。是不是很厲害啊。public Function RSQL(strChar)
If strChar = "" or IsNull(strChar) Then RSQL = "":Exit Function
Dim strBadChar, arrBadChar, tempChar, I
strBadChar = "$,#,',%,^,&,?,(,),<,>,[,],{,},/,\,;,:," & Chr(34) & "," & Chr(0) & ""’注意這里過(guò)濾的是特殊字符 ‘Chr(34)對(duì)應(yīng)的ASCII碼是雙引號(hào)。Chr(0)其實(shí)就是我們上傳改包把空格(20)改成的00
arrBadChar = Split(strBadChar, ",")
tempChar = strChar
For I = 0 To UBound(arrBadChar)
tempChar = Replace(tempChar, arrBadChar(I), "") ‘將特殊字符過(guò)濾為空
Next
RSQL = tempChar
End Function