最近 网站的数据库被注入了代码,同事要我搞个SQL给他,

    刚好自己收藏下, 免得以后在写,最好是不要用了

    废话少说 ,上码

   
    以下sql语句针对于数据库列后边注入代码的情况.
        nvarchar 类型的替换方式
     
        update tablexxx

set columns=replace(columns , substring(columns , charindex('</a' , columns),len(columns)-charindex('</a' , columns)+1),'')

where  charindex('</a' , columns),len(columns) >0 

       text , ntext 类型的替换方式

       

       (1)当字段长度小于8000

       update test set textdemo=replace(convert(varchar(8000),textdemo),

substring(textdemo , charindex('<div class="wxmsjhqx"' , textdemo),len(convert(varchar(8000),textdemo))-charindex('<div class="wxmsjhqx">' , textdemo)+1),'') 

where  charindex('<div class="wxmsjhqx"' , textdemo) >0

       (2)大于 小于 8000多可以用
        

declare @s_str varchar(8000) ,@d_str varchar(8000)

--要替换的字符串

select @s_str ='要替换的字符串',

@d_str=''

 declare @ptrval varbinary(16) ,@str int ,@rplen int 

declare cur cursor for select textptr(textdemo),

charindex('<div class="wxmsjhqx">' ,textdemo)-1,

len(@s_str)

from test where textdemo like '%<div class="wxmsjhqx">%'

open cur

 fetch next from cur into @ptrval ,@str ,@rplen

  while(@@fetch_status =0)

    begin

      declare @sql nvarchar(1000)

      set @sql = 'UPDATETEXT test.textdemo @ptrval '+ltrim(@str)+' '+ltrim(@rplen)+' N'''''

      exec sp_executesql @sql ,N'@ptrval varbinary(16)' ,@ptrval

      print @rplen

      print @str

      print @ptrval

      fetch next from cur into @ptrval ,@str ,@rplen

    end

close cur 

deallocate cur

   

     数据 表 

     CREATE TABLE [dbo].[test](

[id] [int] IDENTITY(1,1) NOT NULL,

[mytext] [nvarchar](3000) COLLATE Chinese_PRC_CI_AS NULL,

[textdemo] [text] COLLATE Chinese_PRC_CI_AS NULL

     ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

     语句比较简单。