看了网上的大多防SQL攻击程序,自己编写了一个函数,比较完美。大家一起测测~

ASP使用者不使用request,用SafeRequest("","","")函数来代替

本SQL防止了Cookies的绕过攻击,具体解说看下面。配合自己编写一个数据库来记录与判断黑名单功能即可

希望有人与我交流~~

<%
dim full,checkip
checkip=userIP()
'===============
'这里判断黑名单数据库中的IP统计50条启示与checkip条件符合的IP
'response.write "已经不可提交数据,本网拒绝您提交任何数据!"
'response.redirect "返回到别的页,增加流量:……——……"
'response.end
'===============

a=safeRequest("action",0,2)
Response.write "防sql后的结果为:"&a'输出过滤好的代码
'*********************************************
' 防止SQL注入的安全SafeRequest函数 清风一吹编写 QQ:99748954
' 有好意见与修改之处,请您联系我,完善SQL注入,在此感谢!, 我写错了可能是我的错,你知道错在哪里不告诉我,你就真的错了!^_^
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
'RequestType:参数类型-数字型(1表示为Request.form方式 0表示为Request.querystring方式 2表示为Request.cookies方式
'对攻击者进行日志记录,对攻击者日志作50条限制则禁用此IP及计算机名标识的提交访问非浏览页面禁用,以免造成DDOS攻击造成爆库
'----解说完毕----
'*********************************************
     Function SafeRequest(ParaName,ParaType,RequestType)
     On Error Resume Next
     Para1=isNumeric(ParaType)
     Request1=isNumeric(RequestType)
     if para1=false or Request1=false then
     response.write "ParaType,RequestType参数类型错误"
     response.end
     end if
  Dim ParaValue
    '判断当前提交的URL是否为本地
    dim str,host,url,keyword
    str="http://" 
    host = Request.ServerVariables("HTTP_HOST") 
    url = Request.ServerVariables("PATH_INFO") '或url 
    keyword = Request.ServerVariables("QUERY_STRING") 
    if keyword <> "" then 
    full = str&host&url&"?"&keyword 
    else 
    full = str&host&url 
    end if
    server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
 if mid(full,8,len(server_v2))<>server_v2 then
Response.write "外部提交数据,防SQL攻击程序拦截:你已经被我网定位为凝视攻击者,您的IP地址是:"&checkip&" 当前时间:"&now()&" 您访问的页面为:"&full&" 我们有权对您采取反攻击·"
    response.end
    end if

 select case RequestType '采用此方法分类吸收提交值,避免Request吸收本地cookies值而达到的SQL注入攻击
 case 0
 '调用Get方法SQL注入判断
 ParaValue=Lcase(Request.Querystring(ParaName))
 CheckGet(ParaValue)
 case 1
 ParaValue=Lcase(Request.form(ParaName))
 '调用Post方法SQL注入判断
 Checkpost(ParaValue)
 case 2
 '调用cookies注入判断方法
 ParaValue=Lcase(Request.cookies(ParaName))
 ParaValue=SafeStr(ParaValue)'现在基本乘下cookies了,经过上面的过滤已经达到了防cookies注入攻击
 end select
  
 If ParaType=1 then'若传递过来的不是数字,判断为SQL注入攻击!
 If not isNumeric(ParaValue) then
Response.write "错误提交数据,防SQL攻击程序拦截:你已经被我网定位为凝视攻击者,您的IP地址是:"&checkip&" 当前时间:"&now()&" 您访问的页面为:"&full&" 我们有权对您采取反攻击·"
 Response.end
 End if
 Else
 '传递过来是字符串型,过滤敏感字符
 ParaValue=SafeStr(ParaValue)
 end if
 SafeRequest=ParaValue
End function

function SafeStr(ParaValue1)
    ParaValue1=replace(replace(replace(replace(replace(replace(replace(ParaValue1,"'",""),"*",""),"?",""),"(",""),")",""),"<",""),".","")
 ParaValue1=replace(replace(replace(replace(replace(replace(ParaValue1,"and",""),"exec",""),"insert",""),"select",""),"delete",""),"update","")
 ParaValue1=replace(replace(replace(replace(replace(replace(ParaValue1,"count",""),"*",""),"%",""),"chr",""),"mid",""),"master","")
 ParaValue1=replace(replace(replace(replace(ParaValue1,"truncate",""),"char",""),"declare"),"sa","")
 SafeStr=ParaValue1
end function


sub CheckGet(Getstr)
dim sql_injdata
SQL_injdata = "' and exec insert select delete update count * % chr mid master truncate char declare master mid chr count char truncate < > ) ( or ? sa backup ."
SQL_inj = split(SQL_Injdata," ")
If Request.QueryString<>"" Then
for each SQL_Get In Request.QueryString
for SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.write "Get非法,防SQL攻击程序拦截:你已经被我网定位为凝视攻击者,您的IP地址是:"&checkip&" 当前时间:"&now()&" 您访问的页面为:"&full&" 我们有权对您采取反攻击·"
'调用日志函数
call AddLog()
'调用反攻击程序
Response.end
end if
next
Next
End If
end sub


sub CheckPost(Getstr)
dim sql_injdata
SQL_injdata = "' and exec insert select delete update count * % chr mid master truncate char declare master mid chr count char truncate < > ) ( or ? sa backup ."
SQL_inj = split(SQL_Injdata," ")
If Request.Form<>"" Then
for each Sql_Post In Request.Form
for SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.write "POST非法,防SQL攻击程序拦截:你已经被我网定位为凝视攻击者,您的IP地址是:"&checkip&" 当前时间:"&now()&" 您访问的页面为:"&full&" 我们有权对您采取反攻击·"'调用日志函数
call AddLog()
'调用反攻击程序
Response.end
end if
next
next
end if
end sub


sub AddLog()
response.write "<br><br>攻击者写进写进日志,入库前判断该IP是否50条,满则不入库!"
'编写个数据库入库及判断记录数'传递IP地址
'将攻击者的信息入到LOG日志中,每个攻击者最多只能拥有50条记录,一旦达到50条日志拒绝此IP及计算机名身份访问,以免造成DDOS攻击,将数据库撑爆
end sub

Function userIP()
if Request.ServerVariables("HTTP_X_FORWARDED_FOR")=empty then
remoteaddr=Request.ServerVariables("REMOTE_ADDR")
else
remoteaddr=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if
userIP=remoteaddr
end Function

%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值