1:一般是如何进行sql注入攻击的?这是通过软件还是通过什么?
2:正则表达式登陆问题,原来做asp的时候不知道听谁说可以用正则表达式直接进入?密码什么的都不要?是不是真有这回事?如果有,我该怎么攻击?

解决方案 »

  1.   

    网站攻击的防范好像很困难,sql攻击好像是利用后台代码直接使用的sql语句。
    正则表达式没听说过。
      

  2.   

    使用sql参数可以避免sql注入攻击.
    可以看一下"构建安全的 ASP.NET 应用程序",希望对你有帮助
    http://www.microsoft.com/china/MSDN/library/archives/library/securityguide/howtodo.asp
      

  3.   

    这不属于C#内容了,正则表达式只可以防错防弊但要防黑防注入,所
    包含的东西就多了。我最近也在学安全性的东东。http://test.szsbi.cn   这里面用的是就是SQL SERVER 2000
    正在等待外部非法注入.
      

  4.   

    你可以看一下
    http://www.blueidea.com/tech/program/2004/1810.asp
    学会怎么注入才能真正了解到防范的原理
      

  5.   

    (论坛答疑点滴)有关sql注入 
    http://community.csdn.net/Expert/topic/3803/3803170.xml?temp=.6236078
    大家存在5点误区:
    1、sql注入比较难防,需要替换select,delete等一打字符
    其实对于字符型替换再多都没有替换单引号为两个单引号来的好!对于数字型替换再多都没有用,一定要类型转换。
    2、忽略DropDownList传来的东西
    其实是不对的,一切客户端的东西都是不可信任的,select下拉框也是!因为可以自己做一个htm提交到服务器。
    3、access比sqlserver不安全
    安全不安全关键看怎么用,如果sqlserver还是像access一样用,一个sa帐户的话,很明显,sqlserver比access不安全,可以直接得到表名和字段名!access反而倒安全点了,因为只能通过逐位猜解得到。
    4、网站没有显示出错信息就说明网站是安全的
    当有记录的时候显示记录,没有记录的时候显示找不到任何记录,通过这两种状态就可以猜解字段名了,所以网页不出错不能说明是安全的
    5、忽略post提交的信息
    很多人对url上传递的东西过滤严格,对于post的东西不理不睬是不对的,post的东西更加容易被注入,因为一般字段比较多在asp.net中强烈建议通过参数来实现sql而不是sql拼接,因为就算你每一个都过滤百密难有疏
    比如:SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
                SqlCommand comm=new SqlCommand("update tb1 set vName=@vName,iAge=@iAge where ID=@id",conn);
                SqlParameter parm1=new SqlParameter("@vName",SqlDbType.NVarChar,50);
                parm1.Value=((TextBox)e.Item.FindControl("name")).Text;
                SqlParameter parm2=new SqlParameter("@iAge",SqlDbType.Int);
                parm2.Value=((TextBox)e.Item.FindControl("age")).Text;
                SqlParameter parm3=new SqlParameter("@id",SqlDbType.Int);
                parm3.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
                comm.Parameters.Add(parm1);
                comm.Parameters.Add(parm2);
                comm.Parameters.Add(parm3);
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
    这样的代码看起来舒服而且又安全,何乐不为?
      

  6.   

    是的,,要对单引号进行处理。
    如:
    select * from userName='用户名' and userPwd='用户密码'
    但如果我的密码是:
    select * from userName='用户名' and userPwd='1'or'1'='1' 那么我的密码是:1'or'1'='1 条件就可以成立了,,