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