本帖最后由 孙树迁 于 2012-3-24 01:03 编辑
今天晚上,刚学了,很好理解,重点是,那个SQL语句,
select count(*) from where username='"+ name +"' and password='"+ pass +"'
正常情况是:
用户输入:admin 8888
select count(*) from where username='admin' and password='888888'
如果用户输入:admin 1' or '1'='1 SQL 语句就变成,(888888 换成1' or '1'='1)
select count(*) from where username='admin' and password='1' or '1'='1' 这个SQL语句,
你运行这个,就读出二个记录。-
- //第三种,最佳方式。
- using(SqlCommand cmd = conn.CreateCommand())
- {
- cmd.CommandText = "select count(*) from T_Users where username=@uname and password=@pwd";
- cmd.Parameters.Add(new SqlParameter("uname",name));
- cmd.Parameters.Add(new SqlParameter("pwd", pass));
- int i = Convert.ToInt32(cmd.ExecuteScalar());
- if (i > 0)
- {
- Console.WriteLine("登陆成功!");
- }
- else
- {
- Console.WriteLine("登陆失败,用户名或密码错误。");
- }
- }
-
-
-
复制代码 这样写,就可以防止SQL注入了。 |