阻止 http://3b3.org/c.js恶意SQL注入

如何最快速度删除?
" <script   src=http://3b3.org/c.js> </script> "
---------------------------------------------------------------
进入SQL查询分析器
选择你的数据库
第一步:先sql表修改所有者为dbo


EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ' '' '' 'dbo ' '   ' 



第二步:统一删除字段被挂的js


declare   @delStr   nvarchar(500)   
set   @delStr= ' <script   src=http://3b3.org/c.js> </script> '
 

set   nocount   on
 

declare   @tableName   nvarchar(100),@columnName   nvarchar(100),@tbID   int,@iRow   int,@iResult   int
   
declare   @sql   nvarchar(500


set   @iResult=0
   
declare   cur   cursor   for
   
select   name,id   from   sysobjects   where   xtype= ''
 

open
   cur   
fetch   next   from   cur   into   @tableName,@tbID
 

while   @@fetch_status=0
   
begin
   
declare   cur1   cursor   for
   
                
--xtype   in   (231,167,239,175,35)   为char,varchar,nchar,nvarchar,text类型   

                select   name   from   syscolumns   where   xtype   in   (231,167,239,175,35)   and   id=@tbID   
open
   cur1   
fetch   next   from   cur1   into   @columnName
   
while   @@fetch_status=0
   
begin
   
            
set   @sql= 'update   [ '   +   @tableName   +   ']   set   [ '+   @columnName   + ']=   replace([ '+@columnName+ '], ' ' '+@delStr+ ' ' '' ' ' ')   where   [ '+@columnName+ ']   like   ' ''+@delStr+ '' ' '
   
            
exec   sp_executesql   @sql
             
            
set   @iRow=@@rowcount
   
            
set   @iResult=@iResult+@iRow
   
            
if   @iRow> 0
   
            
begin
 
print   '表: '+@tableName+ ',列: '+@columnName+ '被更新 '+convert(varchar(10),@iRow)+ '条记录; '
   
            
end
             
            
fetch   next   from   cur1   into   @columnName
 


end
   
close
   cur1   
deallocate
   cur1   

fetch   next   from   cur   into   @tableName,@tbID
   
end
   
print   '数据库共有 '+convert(varchar(10),@iResult)+ '条记录被更新!!! '
 

close
   cur   
deallocate
   cur   
set   nocount   off 

declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000
set @inScript='<script src=http://3b3.org/c.js></script>' 
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
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)),'''+@inScript+''','''')'  ) 
fetch next from table_cursor into @t,@c 
end 
close table_cursor 
deallocate table_cursor;
---------------------------------------------------------------
彻底杜绝SQL注入

1.不要使用sa用户连接数据库
2、新建一个public权限数据库用户,并用这个用户访问数据库
3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限
4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×”
5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高):


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= ''   and   (b.xtype=99   or   b.xtype=35   or   b.xtype=231   or   b.xtype=167
)   
OPEN
   Table_Cursor 
FETCH   NEXT   FROM   Table_Cursor   INTO   @T,@C
 
WHILE(@@FETCH_STATUS=0

BEGIN   print   @c
 
FETCH   NEXT   FROM   Table_Cursor   INTO   @T,@C
   
END
 
CLOSE
   Table_Cursor 
DEALLOCATE
   Table_Cursor   

 

---------------------------------------------------------------

posted @ 2009-07-21 16:10  有安科技  阅读(1670)  评论(0)    收藏  举报