最近 网站的数据库被注入了代码,同事要我搞个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]
语句比较简单。