怀疑是SQL的注入式攻击的。可是我已经替换了很多字符了。如下:
                            Regex regex1=new Regex("'");
Regex regex2=new Regex("net user");
Regex regex3=new Regex("xp_cmdshell");
Regex regex4=new Regex("/add");
Regex regex5=new Regex("exec master.dbo.xp_cmdshell");
Regex regex6=new Regex("net localgroup administrators");
Regex regex7=new Regex("select");
Regex regex8=new Regex("count");
Regex regex9=new Regex("Asc");
Regex regex10=new Regex("char");
Regex regex11=new Regex("mid");
Regex regex12=new Regex(":");
Regex regex13=new Regex("insert");
Regex regex14=new Regex("delete from");
Regex regex15=new Regex("drop");
Regex regex16=new Regex("update");
Regex regex17=new Regex("truncate");
Regex regex18=new Regex("from");
Regex regex19=new Regex("%");
Regex regex20=new Regex("--");
Regex regex21=new Regex("Desc");
攻击的人将数据库里的表全部删除了。1。使用动态sql语句的地方,我都用了将上面的字符替换为了空格了。
2。使用存储过程的地方,我没有替换的。因为看到有人说使用存储过程似乎不存在被注入式攻击的。
3。下载了NBSI2.0来做测试。可是好像我用的方法不对,扫描后没有显示有何种漏洞。
请达人帮忙

解决方案 »

  1.   

    楼上的大哥,是在一个dll里的。我只是把它单独拿出来给大家看看。是不是还有没有捕捉到的字符。再一个。要删除数据库里的表,应该用到的是drop吧。。不过drop我已经捕捉了。
    奇怪ing
      

  2.   

    有没有有考虑是其他漏洞呢?操作系统的补丁都打上,不该开的端口不要开,一般.net程序安全性还是比较好的阿
      

  3.   

    pyonline() 
    我不是很清楚。。不过同在一个服务器的别人的数据库就没有问题。我也在联系数据库管理员了。。看看是不是权限的问题的。。
    不过。目前还是要先考虑自身是不是还有什么缺陷的。
      

  4.   

    你参巧ADO.NET里的编码方法,也说是说,你如果不能用存储过程,或者参数(@...)传递参数的话,那你找到ADO.NET里的方法,你可以通过各种方法找一下它的源码,如反编译,直接或间接调用它方法,
    如果就你这样替换,总会有漏掉的,当然,也不能保证MS的很完善了,但总比自己写好.
      

  5.   

    除了对sql字符串作处理外首先, 程序不要用sa帐号, 新建一个新小权限的帐号;
    其次, 关闭其他不用的应用服务和端口;
      

  6.   

    sql.Replace("'","''")
    应该就够了
      

  7.   

    SQL的注入式攻击刚看了一篇别人的实战文章实在佩服。。没想到还可以这样用的~~
      

  8.   

    SVG(ben) ( ) 
    首先, 程序不要用sa帐号, 新建一个新小权限的帐号;应该没有sa帐号的,新建一个小权限的帐号,这个,我看到很多地方都这么说了,但是不是很懂的,小权限指的是什么呢?不给写入,更新这样的么?还有啊,我想要知道的是:
    1。存储过程里的参数要不要替换那些字符。
    2。到底是我程序代码的问题,还是数据库本身不安全。谢谢大家。
      

  9.   

    可能是,联上sql攻击的吧,打sp3了吗
      

  10.   

    1.主要是单引号替换为两个单引号,这样可防止大多数的攻击
    2.存储过程,其实说的是使用参数式写入才能防止攻击,并非是数据库的存储过程.主要是运用参数式写入的时候,每一个写入的值,都必须与字段类型相符,比如说时间值,你就必须先格式化成时间DATETIME才可写入,如果是文本,则它将自动处理为纯粹的文本,不再考虑是否有别的含义.这样就避免了绝大多数的攻击.
      

  11.   

    如果不是SQL注入攻击,装个软件防火墙试试
      

  12.   

    1.在SQL里面建一个新的用户,只给这个用户够用的权限,比如只有只读的权限,而没有删表的权限。2.过滤的时候有没有注意大小写。SQL是不区分大小写的,Drop,drop,dRop...都是正确的,你都捕捉到了吗?3.其实不用那么多的替换,只要两个就可以了一般是这样的
    string sql = "select * from table where id=" + ID;
    string sql = "select * from table where myName='" + myName + "'";如果是数字(第一种)的话,判断是不是数字;
    如果只字符串(第二种)的话,只要过滤掉 ' 就行了 
    myName = myName.replace("'","");
      

  13.   

    SQL注入的话,你重点看接收传递变量的那几页,比如 aa.aspx?ID=5 像这样的,注入是从这里开始的,那在这个处理页面你可以用 SQLCommand 来写单一的语句,这样安全性要好一些!一般来说,.net的SQL注入可能性要小一些,不管怎么说它比ASP在所有方面都要好一些!第二,你把你的数据库读写权限不要设置成 Everyone 了,改为Internet客户,这样安全点!一点点小介意,你可以自已根据实际情况再看看!
      

  14.   

    http://community.csdn.net/Expert/topic/4158/4158509.xml?temp=.4313166
      

  15.   

    有可能是你上面的那段程序就没有起作用,你检查一下,
    然后就是过滤最关键的"'",基本上的SQl注入都是通过构造Sql语句来完成的,一般都要用到"'"单引号。
    如果有可能的化,尽量的改用存储过程!
      

  16.   

    楼主用参数就不会有SQL注入问题呀
    你过滤再多字符也没用吧,注入是不是不分大小写的呢?
      

  17.   

    建议你先用常用的扫描工具来扫描下网站的漏洞,也不一定就是sql的问题。
      

  18.   

    除了对sql字符串作处理外首先, 程序不要用sa帐号, 新建一个新小权限的帐号;
    其次, 关闭其他不用的应用服务和端口;
      

  19.   

    回复人: haolaiwu(夜风) ( ) 信誉:100 
    你说,我的那段代码没有执行,这个我调试了,成功了,可以替换所有上面需要限制的字符。我现在在想,如果使用存储过程,但是后面不写上参数的类型,是不是也可以被攻击。就像 hchxxzx(NET?摸到一点门槛) ( ) 信誉:103 说的:2.存储过程,其实说的是使用参数式写入才能防止攻击,并非是数据库的存储过程.主要是运用参数式写入的时候,每一个写入的值,都必须与字段类型相符,比如说时间值,你就必须先格式化成时间DATETIME才可写入,如果是文本,则它将自动处理为纯粹的文本,不再考虑是否有别的含义.这样就避免了绝大多数的攻击