防止JS注入式攻击

<%  

'--------定义部份------------------  
Dim XH_Post,XH_Get,XH_Cookie,XH_In,XH_Inf,XH_Xh,XH_Inf2,XH_In2  
'自定义需要过滤的字串,用 "|" 分隔  
XH_In = "'|;|and|exec|insert|select|delete%20from|update|count|*|%|chr|mid|master|truncate|char|declare|drop%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char"  
XH_In2 = "'|;|and|exec|insert|select|delete%20from|update|count|chr|mid|master|truncate|char|declare|drop%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char"  
'----------------------------------  
%>  

<%  
XH_Inf = split(XH_In,"|")  
XH_Inf2 = split(XH_In2,"|")  
'--------POST部份------------------  
If Request.Form<>"" Then  
For Each XH_Post In Request.Form  

For XH_Xh=0 To Ubound(XH_Inf)  
If Instr(LCase(Request.Form(XH_Post)),XH_Inf(XH_Xh))<>0 Then  
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"  
Response.Write "非法操作!系统做了如下记录↓<br>"  
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"  
Response.Write "操作时间:"&Now&"<br>"  
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"  
Response.Write "提交方式:POST<br>"  
Response.Write "提交参数:"&XH_Post&"<br>"  
Response.Write "提交数据:"&Request.Form(XH_Post)  
Response.End  
End If  
Next  
Next  
End If  
'----------------------------------  

'--------GET部份-------------------  
If Request.QueryString<>"" Then  
For Each XH_Get In Request.QueryString  

For XH_Xh=0 To Ubound(XH_Inf)  
If Instr(LCase(Request.QueryString(XH_Get)),XH_Inf(XH_Xh))<>0 Then  
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"  
Response.Write "非法操作!系统做了如下记录↓<br>"  
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"  
Response.Write "操作时间:"&Now&"<br>"  
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"  
Response.Write "提交方式:GET<br>"  
Response.Write "提交参数:"&XH_Get&"<br>"  
Response.Write "提交数据:"&Request.QueryString(XH_Get)  
Response.End  
End If  
Next  
Next  
End If  
'----------------------------------  

'--------COOKIE部份-------------------  
If Request.Cookies<>"" Then  
For Each XH_Cookie In Request.Cookies  

For XH_Xh=0 To Ubound(XH_Inf2)  
If Instr(LCase(Request.Cookies(XH_Cookie)),XH_Inf2(XH_Xh))<>0 Then  
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"  
Response.Write "非法操作!系统做了如下记录↓<br>"  
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"  
Response.Write "操作时间:"&Now&"<br>"  
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"  
Response.Write "提交方式:Cookie<br>"  
Response.Write "提交参数:"&XH_Cookie&"<br>"  
Response.Write "提交数据:"&Request.Cookies(XH_Cookie)  
Response.End  
End If  
Next  
Next  
End If  
'----------------------------------  
%>  

如果有必要用cookie做认证的可以用偶的试验下,可以保证躲过这次的自动攻击,但手动攻击不保证能防住,有条件的还是把cookie认证改成session认证保险点  

在给个网友飘逸发的,如果你只是用新闻系统的,不用COOKIE的,可以用这个  

代码如下  
<%  
Response.Buffer = True  '缓存页面  
'防范get注入  
If Request.QueryString <> ""  Then StopInjection(Request.QueryString)  
'防范post注入  
If Request.Form <> ""  Then StopInjection(Request.Form)  
'防范cookies注入  
If Request.Cookies <> ""  Then StopInjection(Request.Cookies)  

'正则子函数  
Function StopInjection(Values)  
Dim regEx  
Set regEx = New RegExp  
    regEx.IgnoreCase = True  
    regEx.Global = True  
    regEx.Pattern = "'|;|#|([\s\b+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/s/b]select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b[/email]+]*)"  
    Dim sItem, sValue  
    For Each sItem In Values  
        sValue = Values(sItem)  
        If regEx.Test(sValue) Then  
            Response.Write "<Script Language=javascript>alert('非法注入!你的行为已被记录!!');history.back(-1);</Script>"  
            Response.End  
        End If  
    Next  
    Set regEx = Nothing  
End function  
%>  


把代码存为newsql.asp,在conn.asp里include一下就OK了。  

写做还是要规范啊。  

另外BS下那个nuclear3.com的家伙。捞钱不是这么捞的。  



文章来自: 转载
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 1 | 引用: 0 | 查看次数: 4218
回复回复try[2009-08-17 04:15 PM | del]
看来已经处理过了,不管用。呵呵,我没什恶意,就是想试试
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭