Asp classic Sql注入脚本
这个问题的标题似乎是以前问过和回答过的,但对我来说情况不同。我使用此脚本停止ASP站点中的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
<%
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数据。请让我知道这对您有用吗。