/** 作者:慈勤強 Email: cqq1978@Gmail.com */ 函數很簡單, 主要是針對字符串和數字兩種類型的傳入數據分別進行了處理,具體用法: 字符類型的 strUsername = CheckInput(Request(“username“),“s“) 數字類型的 ID = CheckInput(Request(“id“),“i“) 下面是函數 Function CheckInput(str,strType) '函數功能:過濾字符參數中的單引號,對于數字參數進行判斷,如果不是數值類型,則賦值0 '參數意義: str ---- 要過濾的參數 ' strType ---- 參數類型,分為字符型和數字型,字符型為"s",數字型為"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的危害是很大的,比如對于SQL Server,可以創建、刪除數據庫,執行系統命令等等, 如drop table tbl_name, execute master.dbo.xp_cmdshell "command"所以很多人寫的函數就是拼命的去過濾這些可能引起危害的關鍵詞,比如drop ,分號,and,exe,mid等等,羅列了一大堆。
其實,盡可以不必那么繁瑣,非要把簡單的事情復雜化。 對于過濾,ASP中只要針對字符型和數字型分別處理就可以了, 字符型的,把單引號轉換成兩個單引號 strTmp = Replace(Trim(str),"'","''") 數字型的,就判斷是否能夠轉換成數字型的 ,用 isNumeric函數 現在網上說的能夠繞過單引號的攻擊,其實是針對數字類型的,如果對于過濾了單引號的字符型,還有辦法繞過,那就沒得玩了........
|