sql注入就是将一个条件变成了多个条件
假设数据库中有个用户名 admin 密码 123456
string uid = "admin" ; string pwd = "123456"; -------- 正常的是要这样才能正确登录的.
在sql中的语句是: select conut(*) from database where uid='admin' and pwd='123456' 。
但是如果把密码改成 string pwd = "123' or '1' = '1";
在数据库的语句就成了 : select count(*) from database where uid = 'admin' and pwd = '123' or '1' = '1' ----因为后面有个 or '1'='1' 所以这个条件永远成立,即使密码错误也可以登录,甚至用户名错了都可以。高手们可以根据这个漏洞来测试你服务器的一些东西,具体我也不懂了。。
防止sql注入的办法就是参数化.下面上代码
// -> 在需要使用拼接的地方用@引导一个别名(变量)
// -> 创建SqlParameter对象,为别名赋值
// 通过构造函数
// -> 在执行SQL语句的时候,为cmd添加参数
string sql = "select count(*) from database where uid=@uid and pwd=@pwd";
SqlParameter uid = new SqlParameter("@uid", txtUid.Text.Trim());
SqlParameter pwd = new SqlParameter("@pwd", txtPwd.Text);
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
// 添加参数
cmd.Parameters.Add(uid);
cmd.Parameters.Add(pwd);
conn.Open();
int res = Convert.ToInt32(cmd.ExecuteScalar());
if (res > 0)
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("Error");
}
}
} |