大众计算机学习网

专门提供各种电脑教程

ASP.NET操作SQL之SQL命令使用参数防注入攻击之代码示例一

Admin | 2007-12-27 20:10:08 | 被阅次数 | 8280

        很多网友在开发网站时,由于是初学者,仅学会简单的几行SQL代码,诸如查询、更新、插入与删除等简单的SQL操作代码,诸不知,写SQL代码也是很有讲究的,尤其是访问量极高的网站,若不加以防范,往往造成一失足成千古恨的悲剧,为什么这样说呢,如果还不了解的话,到网上查询一下啥么是SQL注入式攻击!

        本章以实例讲解如何在SQL操作代码中使用参数!

        为什么要使用参数,不使用参数行吗?
 
        呵呵,不使用当然行了,并非一定要使用,只是出于安全考虑,最好养成良好习惯,良好的编程操作习惯,就是极有力的防范措施!

        不使用参数的SQL语句,可能存在SQL注入式攻击的危险,简单的讲,就是平时你设置的输入框,或者是查询框,一旦不使用参数,别人随便输入SQL代码当作查询或更新操作,那么数据库就完完了!

        比如说:

        如果你的查询语句是select * from admin where username='"&user&"' and password='"&pwd&"'"

  那么,如果我的用户名是:1' or '1'='1

  呵呵,你的查询语句将会变成:

        select * from admin where username='1 or '1'='1' and password='"&pwd&"'"

  这样你的查询语句就通过了,从而就可以进入你的管理界面。

        这还不算,如果在输入框中加入如下字符:
        ;delete from admin

        那你的数据库不就完完了吗?

        以下是使用防注入的带参数的示例代码:

       SqlConnection MyCon = new SqlConnection(ConfigurationSettings.AppSettings["con"]);
       SqlCommand MyCmd = new SqlCommand("select * from ClientName where 客户名
=@ClientName",MyCon); 
          
       MyCmd.Parameters.Add(new SqlParameter("@ClientName",SqlDbType.VarChar,8000));//加参数
       MyCmd.Parameters["@ClientName"].Value=ClientName.Text.ToString();//给参数赋值哦

       MyCon.Open();
       try
       {
        SqlDataReader MyReader;
        MyReader=MyCmd.ExecuteReader();
        if(MyReader.Read())
        {   
            //读取成功
        }
        else
        {
     
        }   
       }
       catch
       {
       }
       finally
       {
        MyCon.Close();
       }

      以上是代码部分,请参阅,为使程序更安全,可适当使用事物处理,关于事物处理已在本站其他文章有说明,敬请查看…