数据库被注入攻击   所有文本型字下段数据都被加了     <script_src=http://ucmal.com/0.js> </script> 
怎么删掉?
--sql 2000解决方法
DECLARE @fieldtype sysname
SET @fieldtype='varchar'--删除处理
DECLARE hCForEach CURSOR GLOBAL
FOR
SELECT N'update '+QUOTENAME(o.name)
    +N' set  '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'
FROM sysobjects o,syscolumns c,systypes t
WHERE o.id=c.id 
    AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
    AND c.xusertype=t.xusertype
    AND t.name=@fieldtype
EXEC sp_MSforeach_Worker @command1=N'?'
--sql 2005 解决方法
declare  @t  varchar(255),@c  varchar(255)  
declare  table_cursor  cursor  for  
select  a.name,b.name  from  sysobjects  a,syscolumns  b  
where  a.iD=b.iD  AnD  a.xtype='u'  
AnD  (b.xtype=99  or  b.xtype=35  or  b.xtype=231  or  b.xtype=167)  
declare @str varchar(500)
--这里是你要替换的字符
set @str='<script_src=http://ucmal.com/0.js> </script>'
open  table_cursor  fetch  next  from  table_cursor  
into  @t,@c  while(@@fetch_status=0)  
begin      
    exec('update  [' + @t + ']  set  [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''')')      
    fetch  next  from  table_cursor  into  @t,@c  
end  
close  table_cursor  deallocate  table_cursor; 

解决方案 »

  1.   

    SQL注入专题
    http://topic.csdn.net/u/20081205/09/3dd06076-bcbe-45d4-998c-8999fdbe6fae.html
      

  2.   

    ntext类型好象操作不了,你转换为varchar再更改,这样试试.
      

  3.   

    主要确定你用的字段类型,是varchar还是nvarchar,--sql 2000解决方法
    DECLARE @fieldtype sysname
    SET @fieldtype='varchar--这里输入你用的字段类型--删除处理
    DECLARE hCForEach CURSOR GLOBAL
    FOR
    SELECT N'update '+QUOTENAME(o.name)
        +N' set  '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'
    FROM sysobjects o,syscolumns c,systypes t
    WHERE o.id=c.id 
        AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
        AND c.xusertype=t.xusertype
        AND t.name=@fieldtype
    EXEC sp_MSforeach_Worker @command1=N'?'
      

  4.   

    ntext里面的恶意代码怎样用命令清除,那位高手知道
      

  5.   

    CREATE  trigger 触发器名on 表名
    for update,insert
    as
    declare @a varchar(100) --存储字段1declare @b varchar(100) --存储字段2declare @c varchar(100) --存储字段3select @a=字段1,@b=字段2,@c=字段3 from inserted
    if(@a like '%script%' or @b like '%script%' or @c like '%script%')
    begin   
          ROLLBACK   transaction   
    end
    这个代码说明可以防止数据库被注入,但我不知道怎么使用。
    那位知道这段触发器具本怎样试用,我不知道怎样发到我的数据库里,是我数据库中每个表都放?请高手写个具体试用的讲解,谢谢
      

  6.   

    ntext 也是可以自动的,如果不行可以试下替换类型试试:update 表名 set 字段名=replace(cast(字段名 as varchar(8000)),'要替换的代码','') where 
    字段名 like '%要替换的代码%'