看了传志播客的视频,了解到了SQL的漏洞注入问题。在这里记录一下。
<pre>
cmd.CommandText = @"select count(*)" from UserInfo where UserName = '"+txtUserName.Text+"'and UserPwd = '"+txtPwd.Text+"'";
<code>
这样写其实是存在SQL注入漏洞问题的,在登陆界面输入a’ or x=x – ,然后再输入任意密码就能成功登陆。因为,在sql语句中–是注释符会注释掉and后面的语句,然后where后面的语句就变成了:
where 'a'or x=x--后面全被注释掉
x=x在sql中结果恒为真,所以不管输入用户名和密码正确与否都能登陆,在以后编写代码的时候一定要注意这个问题。
而正确的写法,应该是这样的
<pre>
cmd.CommandText = @"select count(*)fro UserInfo where UserName=@UserName and UserPwd=@UserPwd";
//使用了参数之后,怎样给参数赋值。
cmd.Parameters.Add("@UserName",txtUserName.Text);
cmd.Parameters.Add("@UserPwd",txtPwd.Text);
//陷阱:当参数值为0的,会把它SqlDbType
//用下面这个方法更保险。
cmd.Parameters.AddWithValue();
<code>