摘要:本文讲解了SQL Server 数据库表字段尾部被注入恶意代码的解决方法,希望学习本文后读者在碰到同样问题时可以妥善解决。
查找全表进行替换 注:数据库为sql 2000 ---查找所有表并替换某值 declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b ,systypes c where a.id=b.id and a.xtype='u' and c.name in ('char', 'nchar', 'nvarchar', 'varchar','text','ntext') declare @str varchar(500),@str2 varchar(500) set @str='installment loans'/*要替换的内容*/ set @str2='' 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+''','''+ @str2 +''')') fetch next from table_cursor into @t,@c end close table_cursor deallocate table_cursor; --------------------------------------------------------------------------------------------------------------------- 上面那脚本有些记录会报错,没有清理干净 。现分两步解决此问题 1 查找到恶意代码所在的表和字段 2 用语句replace 先来查找某值在某表某字段的代码 -----查找某一值 declare @str varchar(100) set @str='ava8' www.2cto.com declare @s varchar(8000) declare tb cursor local for select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'') print ''所在的表及字段: ['+b.name+'].['+a.name+']''' from syscolumns a join sysobjects b on a.id=b.id where b.xtype='U' and a.status>=0 and a.xusertype in(175,239,231,167) open tb fetch next from tb into @s while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end close tb deallocate tb 下面是清除找到所在表和字段后手动替换的脚本 declare @t varchar(5000) --表名 declare @c varchar(5000) ---字段名 declare @str varchar(5000) --恶意代码 declare @str2 varchar(5000) -- 替换后的值,这里通常是替换为'' set @t='收藏' set @c='标题图片' --set @str='' set @str='<a ' set @str2='' exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')')
关注职坐标SQL Server频道,学习更多的数据库知识。
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号