明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

一個(gè)asp函數(shù), 處理SQL Injection漏洞

[摘要]/**作者:慈勤強(qiáng)Email: cqq1978@Gmail.com*/函數(shù)很簡(jiǎn)單, 主要是針對(duì)字符串和數(shù)字兩種類型的傳入數(shù)據(jù)分別進(jìn)行了處理,具體用法:字符類型的strUsername = CheckInput(Request(“username“),“s“)數(shù)字類型的ID = CheckInput...

/**
作者:慈勤強(qiáng)
Email: cqq1978@Gmail.com
*/

函數(shù)很簡(jiǎn)單, 主要是針對(duì)字符串和數(shù)字兩種類型的傳入數(shù)據(jù)分別進(jìn)行了處理,具體用法:

字符類型的
strUsername = CheckInput(Request(“username“),“s“)
數(shù)字類型的
ID = CheckInput(Request(“id“),“i“)

下面是函數(shù)

Function CheckInput(str,strType)
   '函數(shù)功能:過濾字符參數(shù)中的單引號(hào),對(duì)于數(shù)字參數(shù)進(jìn)行判斷,如果不是數(shù)值類型,則賦值0
   '參數(shù)意義:  str        ---- 要過濾的參數(shù)
   '                 strType ---- 參數(shù)類型,分為字符型和數(shù)字型,字符型為"s",數(shù)字型為"i"
 Dim strTmp
 strTmp     = ""
 If strType ="s" Then
  strTmp = Replace(Trim(str),"'","''")
 ElseIf strType="i" Then
  If isNumeric(str)=False Then str="0"
  strTmp = str
 Else
  strTmp = str
 End If
 CheckInput = strTmp
End Function


SQL Injection的危害是很大的,比如對(duì)于SQL Server,可以創(chuàng)建、刪除數(shù)據(jù)庫(kù),執(zhí)行系統(tǒng)命令等等, 如drop table tbl_name, execute master.dbo.xp_cmdshell "command"所以很多人寫的函數(shù)就是拼命的去過濾這些可能引起危害的關(guān)鍵詞,比如drop ,分號(hào),and,exe,mid等等,羅列了一大堆。

其實(shí),盡可以不必那么繁瑣,非要把簡(jiǎn)單的事情復(fù)雜化。
對(duì)于過濾,ASP中只要針對(duì)字符型和數(shù)字型分別處理就可以了,

字符型的,把單引號(hào)轉(zhuǎn)換成兩個(gè)單引號(hào)  strTmp = Replace(Trim(str),"'","''")
數(shù)字型的,就判斷是否能夠轉(zhuǎn)換成數(shù)字型的 ,用 isNumeric函數(shù)

現(xiàn)在網(wǎng)上說的能夠繞過單引號(hào)的攻擊,其實(shí)是針對(duì)數(shù)字類型的,如果對(duì)于過濾了單引號(hào)的字符型,還有辦法繞過,那就沒得玩了........