数据库被挂马的解决方法

作者:网络 来源:佚名 更新时间:2009-03-21 13:23:33 点击:


收集最实用的网页特效代码!

据库被挂马我相信很多人都碰到过。在这里,我讲下我处理的方法。
第一步:为现有数据库做好备份。
第二步:
执行如下asp文件,这样就可以去掉数据库当中的js木马:
注:conn.asp自己去写了。

代码:
'这里放入js木马内容:请记得改为自己数据库中的js木马内容。
<!--#include file="conn.asp"-->
<%
server.scripttimeout=180
set rstschema = conn.openschema(20)
k=1
do until rstschema.eof '遍历数据库表
    if rstschema("table_type")="table" then
        response.write k&".<font color=red><b>"&rstschema("table_name") & "</b></font>:" '显示表名
        set rs=server.createobject("adodb.recordset")
        sql="select * from [" & rstschema("table_name")&"]"
        rs.open sql,conn,1,3
        for i=0 to rs.fields.count-1 '遍历表中字段
           if int(rs(i).type)=129 or int(rs(i).type)=130 or int(rs(i).type)=200 or int(rs(i).type)=201 or int(rs(i).type)=202 or int(rs(i).type)=203 then'只处理字段类型为字符型的字段
            conn.execute("update ["&rstschema("table_name")&"] set "&rs(i).name&" =replace(cast("&rs(i).name&" as varchar(8000)),'这里放入js木马内容','')")
            response.write rs(i).name &" "&rs(i).type &" "'显示执行过的字段名。
          end if
        next
        response.write "<br>"
    end if
    rstschema.movenext
    k=k+1
loop
response.write "执行成功"
%>
如果数据库表很多的话,上面的遍历数据库结构未执行完就被iis给停止了。在这时候可以在
代码:
if rstschema("table_type")="table" then
当中适当加入k值的范围,如:
复制内容到剪贴板
代码:
if rstschema("table_type")="table" k>10 and k<20 then
这样的话就一次只操作9个表。

第三步:
根据数据库js注入的特性(会包括<script、</script>和http://这样的字符),
在conn.asp里面放入如下代码:
 
代码:
function cheack_sqljs()'防止数据库外链js注入:true为发现外链js注入。
    dim f_post,f_get
    cheack_sqljs=false
    if request.form<>"" then'表单提交时的检测
        for each f_post in request.form
            if (instr(lcase(request.form(f_post)),"<script")<>0 or instr(lcase(request.form(f_post)),"</script>")<>0) and instr(lcase(request.form(f_post)),"http://")<>0 then
                cheack_sqljs=true
                exit for
            end if
        next
    end if
    if request.querystring<>"" then'querystring提交时的检测
        for each f_get in request.querystring
            if (instr(lcase(request.form(f_get)),"<script")<>0 or instr(lcase(request.form(f_get)),"</script>")<>0) and instr(lcase(request.form(f_get)),"http://")<>0 then
                cheack_sqljs=true
                exit for
            end if
        next
    end if
end function
function checkdatafrom()'检查提交数据来源:true为数据从站外提交过来的
    checkdatafrom=true
    server_v1=cstr(request.servervariables("http_referer"))
    server_v2=cstr(request.servervariables("server_name"))
    if mid(server_v1,8,len(server_v2))<>server_v2 then
        checkdatafrom=false
    end if
end function
if cheack_sqljs or checkdatafrom then
   response.write "<script language=javascript>alert('禁止执行,非法操作。');</script>"
   response.end()
end if