好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

用参数的形式防止注入漏洞 - 网站安全 - 自学p

在判断用户登录时如果用了string.format字符串拼接的方式,用户有可能通过相应的拼接,去注视掉要求验证的代码;这样就有了 漏洞 ;然而在net中通过参数的方式(本质是存储过程对这样的行为进行防范;)  protected void Button1_Click(object sender, EventArgs e)         {             string constr = "data source=.;initial catalog=UserDB1;User id=sa;password=admin";             using(SqlConnection con=new SqlConnection(constr))             {                // string sql = string.Format("select count(*) from T_Users where FuserName='{0}' and Fpassword='{1}'",txtUserName.Text.Trim(),txtPassword.Text);                //以上这种拼接sql语句的方法有sql注入漏洞攻击的问题 jk' or 1=1 --                 //如果避免注入漏洞攻击呢?使用参数的方法或存储过程的方法                 string sql = "select count(*) from T_Users where FuserName=@username and Fpassword=@password";

                using (SqlCommand cmd=new SqlCommand(sql,con))                 {                     con.Open();                    //在数据服务器端执行sql语句前需要告诉它@username,@password是谁。                     //cmd.Parameters.AddWithValue("@username", txtUserName.Text.Trim());                                       //cmd.Parameters.AddWithValue("@password", txtPassword.Text);                     //每一个参数都是一个参数对象                     //SqlParameter p1 = new SqlParameter("@username", txtUserName.Text.Trim());                     //cmd.Parameters.Add(p1);                     //SqlParameter p2 = new SqlParameter("@password", txtPassword.Text);                     //cmd.Parameters.Add(p2);                     //很多情况下参数的个数很多p1.....p9                                         SqlParameter[] pms = new SqlParameter[] {                                         new SqlParameter("@username", txtUserName.Text.Trim()),                     new SqlParameter("@password", txtPassword.Text)                     };                     cmd.Parameters.AddRange(pms);

                    //通过监视发现,ADO的参数替换的方法避免了注入漏洞攻击,它通过一个存储过程实现了把输入的任何字串作为字串处理的形式。                     //exec sp_executesql N'select count(*) from T_Users where FuserName=@username and Fpassword=@password',N'@username nvarchar(13),@password nvarchar(4)',@username=N'jk'' or 1=1 --',@password=N'sfds'                    //在sql中,把’单引号转意为字符串的方法是前面再加一个单引号。                     //在sql中的参数都是以@开始的,                     int r=Convert.ToInt32(cmd.ExecuteScalar());//把sql语句送到数据服务器端执行                    con.Close();//可以提前关闭链接,提高效率。                    if (r > 0)                    {                        Response.Write("登陆成功!");                    }                    else                    {                        Response.Write("登陆失败!");                    }

查看更多关于用参数的形式防止注入漏洞 - 网站安全 - 自学p的详细内容...

  阅读:37次