2011-09-27 74 views
2

這個問題的標題可能似乎以前被問及和回答,但它對我來說是不同的場景。我使用這個腳本來停止我的ASP網站中的SQL注入。根據我的知識或注射腳本,我嘗試了一切。是否仍有可能突破這個代碼,或者你覺得這很好。Sql注入腳本

這裏是腳本

<% 
Function IsInject(strCheck, boolForm) 
    IsInject = False 
    If Not boolForm And Len(strCheck) > 50 Then IsInject = True 
' Dim sCmdList, arrCmds, i 
    If boolForm Then 
     sCmdList = "declare,varchar,convert,delete,create,is_srvrolemember,ar(,cast(" 
    Else 
     sCmdList = "update,union,select,drop,declare,varchar,convert,delete,create,is_srvrolemember,ar(,cast(,char(" 
    End If 
    arrCmds = Split(sCmdList, ",") 
    For i = 0 To UBound(arrCmds) 
     If Instr(UCase(CStr(strCheck)), UCase(arrCmds(i))) > 0 Then 
      IsInject = True 
      Exit For 
     End If 
    Next 
    Erase arrCmds 
End Function 
Function CleanInject(strClean, boolInt) 
    If boolInt Then CleanInject = CInt(strClean) Else CleanInject = Replace(strClean, "'", "''") 
End Function 

'----------------------------------------------------------- 
'redirect user if specific IP 
'Dim ipaddress, bFBIRedirect, sInjectType 
bFBIRedirect = True 
ipaddress = Request.ServerVariables("REMOTE_ADDR") 
Select Case ipaddress 
    Case "90.120.206.10" 
    Case Else 
     bFBIRedirect = False 
End Select 
If bFBIRedirect Then Response.Redirect "http://www.fbi.gov" 
'----------------------------------------------------------- 

'Dim bIsInject, sHackString 
bIsInject = False 

If Not bInject Then 
' Dim qsItm 
    For Each qsItm In Request.QueryString 
     If IsInject(Request.QueryString(qsItm), False) Then 
      bIsInject = True 
      sHackString = qsItm & "=" & Request.QueryString(qsItm) 
      sHackType = "QueryString" 
      sInjectType = "qs-" & Request.QueryString(qsItm) 
      Exit For 
     End If 
    Next 
End If 
If Not bInject Then 
' Dim frmItm 
' For Each frmItm In Request.Form 
'  If IsInject(Request.Form(frmItm), True) Then 
'   bIsInject = True 
'   sHackString = Request.Form(frmItm) 
'   sHackString = frmItm & "=" & Request.Form(frmItm) 
'   sHackType = "Form" 
'   Exit For 
'  End If 
' Next 
End If 

If bIsInject Then 
    Session("hacktype") = sHackType 
    Session("hackstr") = sHackString 
    Session("thepagefrom") = Request.ServerVariables("PATH_INFO") 
    Session("theip") = Request.ServerVariables("REMOTE_ADDR") 

' Dim arrWhereAt, iWhereAt, sRedirect 

    arrWhereAt = Split(Request.ServerVariables("PATH_INFO"), "/") 
    iWhereAt = UBound(arrWhereAt) 

    sRedirect = "unknownerror.asp?ip=" & Request.ServerVariables("REMOTE_ADDR") & "&err=" & sInjectType & "&pg=" & Request.ServerVariables("PATH_INFO") 
    If iWhereAt = 1 Then sRedirect = "../" & sRedirect 
    If iWhereAt = 2 Then sRedirect = "../../" & sRedirect 
    If iWhereAt = 3 Then sRedirect = "../../../" & sRedirect 

    Response.Redirect sRedirect 
End If 
%> 
+5

**只需使用參數**。 – SLaks

+0

這不會做任何事情來幫助xss攻擊。 – asawyer

+1

你好帕雷恩,在這裏你只檢查了Querystring部分,我可以看到request.form部分被評論,所以這應該在我們發佈表單時檢查。你也可以檢查cookies數據。請讓我知道這對你有用。 –

回答

1

使用黑名單刪除命令不是一個好主意。你必須確保你覆蓋了所有可能的命令,並且仍然有人可能偷偷摸摸過去。如果您從不是攻擊的用戶那裏獲取數據,但仍然包含攻擊字符串,這也可能會失敗。例如「回到蘇聯時代」。

正如Nikolai所建議的,看看您是否可以找到某種類型的準備好的語句來使用。或者找一個非常好的圖書館來爲你正確轉義數據。

1

,而這樣做,我認爲創建SQL查詢時,我會用ADO參數對象,第二個最好的事情是做inputfields的類型轉換爲動態SQL查詢,例如作爲將字符串轉換爲SQL字符串(替換任何'用兩個'),確保數字是一個數字等。