SqlCommand的Parameters属性
SqlCommand的Parameters属性:获得与该命令关联的参数集合
using (SqlConnection conn =new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\Database1.mdf;integrated Security=True;User Instance=false")) { conn.Open();//打开数据库 using (SqlCommand cmd = conn.CreateCommand()) { //错误写法开始—— //cmd.CommandText = "select count(*) from 用户 where 帐号='" + yhm + "'"+"and 密码='" + mm + "'"; //错误示例。如果密码输出: 1' or '1' = '1 可以登录成功。造成SQL注入漏洞攻击 //错误写法结束—— //正确写法开始—— cmd.CommandText = "select count(*) from 用户 where 帐号=@UN and 密码=@P"; cmd.Parameters.Add(new SqlParameter("UN",yhm)); cmd.Parameters.Add(new SqlParameter("P",mm)); //正确写法结束—— int i = Convert.ToInt32(cmd.ExecuteScalar()); if (i > 0) { Console.WriteLine("登录成功!"); } else { Console.WriteLine("用户名或密码错误!"); } } }
错误写法输出结果:
错误的写法 获得的是
where 条件就变成了 帐号=admin 并且 密码=1 或者 1=1 这样就为真了。那么就返回一个大于0的数了。就登录成功了。
正确写法输出结果: