cn.daxia123.cn/cn.js注入的解决方案

近期网站数据库中被注入了大量cn.daxia123.cn/cn.js的恶意脚本,不解的是我明明在程序做了防注入代码还能被轻易攻击。

经查证发现该挂马将攻击代码用二进制编译成了类似于0x4445434C415245204054205641524348415228323535292C404的代码,防sql注入的代码无法识别,但sql server 会将此方式编译的代码还原为原来的样子这样就绕过了sql防注入代码。由于不是“and|update|script” 之类的防护方式能够解决的,除非网站全部改静态,否则中招的可能性很大。
针对该原理,首先我改进了防sql注入的代码(注意该代码不要用JS来写,否则对于禁掉该脚本的浏览器是无效的),做成avoidin.asp,嵌入每个传参数的ASP页面中进行非法代码的过滤,并将非法注入记录到日志中;然后,在数据库新增、更新前,对Value进行严格检查;最后把网站前台每个页面的数据库访问权限均改为只读,仅在后台维护系统和留言等内容提交中切换为可写权限。

这样改进后,这两个月来网站终于稳定下来,没再接连招到攻击了。

 

avoidin.asp代码如下:

<%
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      
   unLawStr=""
   for each x in Request.ServerVariables
     unLawStr = unLawStr & x & ":" & Request.ServerVariables(x) & Chr(13)&Chr(10)
   Next
   
   WriteLog unLawStr

            Response.Write "非法注入!你的行为已被记录!!:<br>"
            response.write Replace(unLawStr,Chr(13),"<br>")      
            Response.End
        End If
    Next
    Set regEx = Nothing
End function

Sub WriteLog(str)
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
        logFile="c:/sqlin.log"
        Set fob = server.CreateObject("Scripting.filesystemObject")       
        Set fle=fob.OpenTextFile(logFile,ForAppending,true)       
        fle.writeLine "注入点:" & Now()
        fle.write str
        fle.writeline
        fle.close
        Set fob=nothing
End Sub
%>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值