Asp classic Sql注入脚本

Asp classic Sql注入脚本,asp-classic,sql-injection,Asp Classic,Sql Injection,这个问题的标题似乎是以前问过和回答过的,但对我来说情况不同。我使用此脚本停止ASP站点中的sql注入。据我所知,我什么都试过了。是否仍有可能突破此代码,或者您认为这很好 这是剧本 <% Function IsInject(strCheck, boolForm) IsInject = False If Not boolForm And Len(strCheck) > 50 Then IsInject = True ' Dim sCmdList, arrCmds, i

这个问题的标题似乎是以前问过和回答过的,但对我来说情况不同。我使用此脚本停止ASP站点中的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
%>
50则IsInject=True
'Dim sCmdList,arrCmds,i
如果是boolForm那么
sCmdList=“declare,varchar,convert,delete,create,is_srvrolemember,ar(,cast(”
其他的
sCmdList=“更新、联合、选择、删除、声明、varchar、转换、删除、创建、is_srvrolemember、ar(、cast(、char(”
如果结束
arrCmds=Split(sCmdList,“,”)
对于i=0到UBound(arrCmds)
如果Instr(UCase(CStr(strCheck))、UCase(arrCmds(i))大于0,则
IsInject=True
退出
如果结束
下一个
删除arrCmds
端函数
函数CleanInject(strClean、boolInt)
如果是boolInt,则CleanInject=CInt(strClean),否则CleanInject=Replace(strClean,“,”)
端函数
'-----------------------------------------------------------
'如果是特定IP,则重定向用户
'Dim ipaddress,bFBIRedirect,sInjectType
bFBIRedirect=True
ipaddress=Request.ServerVariables(“远程地址”)
选择案例IP地址
案例“90.120.206.10”
其他情况
bFBIRedirect=False
结束选择
如果是bFBIRedirect,则为Response.Redirect“http://www.fbi.gov"
'-----------------------------------------------------------
“昏暗的,发抖的绳子
双注入=假
如果不是,那么
“Dim qsItm
对于Request.QueryString中的每个qsItm
如果IsInject(Request.QueryString(qsItm),False),则
双注入=真
sHackString=qsItm&“=”&Request.QueryString(qsItm)
sHackType=“QueryString”
sInjectType=“qs-”&请求.QueryString(qsItm)
退出
如果结束
下一个
如果结束
如果不是,那么
“昏昏欲睡
'对于请求表格中的每个frmItm
'如果IsInject(Request.Form(frmItm),True),则
'bIsInject=True
'sHackString=Request.Form(frmItm)
'sHackString=frmItm&“=”&Request.Form(frmItm)
'sHackType=“表单”
"退出
"完"
”“接着呢
如果结束
如果是这样的话
会话(“hacktype”)=sHackType
会话(“hackstr”)=sHackString
会话(“thepagefrom”)=Request.ServerVariables(“路径\信息”)
会话(“theip”)=Request.ServerVariables(“远程地址”)
“我在哪儿,我在哪儿,我在哪儿?”
arrwhere=Split(Request.ServerVariables(“路径信息”),“/”)
i此处=UBound(arrt)
sRedirect=“UnknowError.asp?ip=“&Request.ServerVariables(“REMOTE\u ADDR”)和”&err=“&sInjectType&”&pg=“&Request.ServerVariables(“PATH\u INFO”)
如果iWhereAt=1,则sRedirect=“../”&sRedirect
如果iWhereAt=2,则sRedirect=“../../”&sRedirect
如果iWhereAt=3,则sRedirect=“../../../”&sRedirect
响应。重定向sredict
如果结束
%>

在创建SQL查询时,我想我应该使用ADO参数对象,而不是这样做,第二个最好的方法是对动态SQL查询的inputfields进行类型转换,例如将字符串转换为SQL字符串(用两个“”替换任意一个),确保数字是一个数字等。

使用黑名单删除命令不是一个好主意。您必须确保覆盖所有可能的命令,但仍有人可能会偷偷通过某些命令。如果您从用户处获取的数据不是攻击,但仍包含攻击字符串,则此操作也可能失败。例如“回到苏联时代”


正如Nikolai所建议的,看看你是否能找到某种类型的准备好的语句来使用。或者找到一个真正好的库来为你正确地转义数据。

只使用参数。这对xss攻击没有任何帮助。你好,Pareen,在这篇文章中,你只检查了Querystring部分,我可以看到request.form部分被注释了,所以这应该是ch在我们发布表单时请检查。您也可以检查cookies数据。请让我知道这对您有用吗。