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
%>