<% '检测SQL注入,发现注入语法,直接报非法输入,并退出 sql_bad = sql_bad & ".*xp_cmdshell.*" sql_bad = sql_bad & vbcrlf & ".*and.*db_name\(\).*\>.*0.*" sql_bad = sql_bad & vbcrlf & ".*and.*user.*>.*0.*" sql_bad = sql_bad & vbcrlf & ".*cacls.exe.*:.*" sql_bad = sql_bad & vbcrlf & ".*exec.*copy.*" sql_bad = sql_bad & vbcrlf & ".*insert.*exec.*" sql_bad = sql_bad & vbcrlf & ".*bulk.*insert.*exec.*" sql_bad = sql_bad & vbcrlf & ".*select.*is_srvrolemember.*" sql_bad = sql_bad & vbcrlf & ".*use.*model.*" sql_bad = sql_bad & vbcrlf & ".*select.*is_member.*" sql_bad = sql_bad & vbcrlf & ".*declare.*sysname.*" sql_bad = sql_bad & vbcrlf & ".*xp_availablemedia.*" sql_bad = sql_bad & vbcrlf & ".*xp_dirtree.*" sql_bad = sql_bad & vbcrlf & ".*xp_terminate_process.*" sql_bad = sql_bad & vbcrlf & ".*sp_dropextendedproc.*" sql_bad = sql_bad & vbcrlf & ".*exec.*sp_addlogin.*" sql_bad = sql_bad & vbcrlf & ".*xp_regdeletekey.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regread.*" sql_bad = sql_bad & vbcrlf & ".*insert.*temp.*exec.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regenumvalues.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regwrite.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regread.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*master.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regdeletevalue.*'.*" sql_bad = sql_bad & vbcrlf & ".*declare.*@.*char.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regaddmultistring.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regdeletekey.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regenumvalues.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regread.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regremovemultistring.*'.*" sql_bad = sql_bad & vbcrlf & ".*exec.*xp_regwrite.*'.*" sql_bad = sql_bad & vbcrlf & ".*declare.*@.*" sql_bad = sql_bad & vbcrlf & ".*union.*select.*" sql_bad = sql_bad & vbcrlf & ".*select.*from.*" sql_bad = sql_bad & vbcrlf & ".*insert.*into.*" sql_bad = sql_bad & vbcrlf & ".*update.*set.*" sql_bad = sql_bad & vbcrlf & ".*delete.*from.*" sql_bad = sql_bad & vbcrlf & ".*net.*localgroup.*" sql_bad = sql_bad & vbcrlf & ".*net.*user.*" sql_bad = sql_bad & vbcrlf & ".*truncate.*" sql_bad = sql_bad & vbcrlf & ".*backup.*to.*" sql_badA = split(sql_bad, vbcrlf) '检测GET If Request.QueryString<>"" Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(sql_badA) if sql_test_isbad(Request.QueryString(SQL_Get),sql_badA(SQL_Data)) = true then response.write "输入非法:"&Request.QueryString(SQL_Get) Response.end end if next Next End If '检测POST If Request.Form<>"" Then For Each Sql_Post In Request.Form For SQL_Data=0 To Ubound(sql_badA) if sql_test_isbad(Request.Form(Sql_Post),sql_badA(SQL_Data)) = true then response.write "输入非法:"&Request.Form(Sql_Post) Response.end end if next next end if '检测cookie If Request.Cookies<>"" Then For Each Sql_Cookie In Request.Cookies For SQL_Data=0 To Ubound(sql_badA) if sql_test_isbad(Request.Cookies(Sql_Cookie),sql_badA(SQL_Data)) = true then response.write "输入非法:"&Request.Cookies(Sql_Cookie) Response.end end if next next end if if Request.ServerVariables("REMOTE_ADDR")<>"" then For SQL_Data=0 To Ubound(sql_badA) if sql_test_isbad(Request.ServerVariables("REMOTE_ADDR"),sql_badA(SQL_Data)) = true then response.write "输入非法IP" Response.end end if next end if if Request.ServerVariables("HTTP_X_FORWARDED_FOR")<>"" then For SQL_Data=0 To Ubound(sql_badA) if sql_test_isbad(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),sql_badA(SQL_Data)) = true then response.write "输入非法FIP" Response.end end if next end if public function sql_test_isbad(str, patten) sql_test_isbad = true Dim regEx, Matches Set regEx = New RegExp regEx.Pattern = patten regEx.IgnoreCase = True Set Matches = regEx.execute(str) if Matches.count > 0 then sql_test_isbad=true else if instr( str, "'") > 0 then sql_test_isbad=true else sql_test_isbad=false end if end if end function '检测非字符 'SQL_injdata = "'|exec |insert |select |update |delete |set |xp_cmdshell |exec master|xp_dirtree |exec master |char |net localgroup administrators | and |net user | or |mid( |asc( |truncate |cast|declare|exec|varchar" SQL_injdata = "'|exec |insert | select |update |delete |set |xp_cmdshell|exec master|xp_dirtree|exec master|char |net localgroup administrators| and |net user| or |mid(|asc(|truncate |declare|exec|varchar|" SQL_injdata = SQL_injdata & "'/*|exec/*|insert/*|select/*|update/*|delete/*|set/*|xp_cmdshell|exec master|xp_dirtree|exec master|char/*|net localgroup administrators/*|*/and/*|net user |*/or/*|mid(|asc(|truncate/*|declare|exec|varchar" SQL_inj = split(SQL_Injdata,"|") '检测GET If Request.QueryString<>"" Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(SQL_inj) if instr(lcase(Request.QueryString(SQL_Get)),Sql_Inj(Sql_DATA))>0 Then response.write "输入非法,非法文字:"&Sql_Inj(Sql_DATA) Response.end end if next Next End If '检测POST If Request.Form<>"" Then For Each Sql_Post In Request.Form For SQL_Data=0 To Ubound(SQL_inj) if instr(lcase(Request.Form(Sql_Post)),Sql_Inj(Sql_DATA))>0 Then response.write "输入非法,非法文字:"&Sql_Inj(Sql_DATA) Response.end end if next next end if '检测cookie If Request.Cookies<>"" Then For Each Sql_Cookie In Request.Cookies For SQL_Data=0 To Ubound(SQL_inj) if instr(lcase(Request.Cookies(Sql_Cookie)),Sql_Inj(Sql_DATA))>0 Then response.write "输入非法,非法文字:"&Sql_Inj(Sql_DATA) Response.end end if next next end if %>