登录SQL注入
在登录页面的账号密码的输入框中分别输入,这个值:1' or '1'='1
一,验证的数据库语句,讲传人的值组合成数据库语句:
public DataTable CheckLogin(string name, string pwd) { string strSqlCom = "select *from UserInfo where Name = '" + name + "' and Pwd = '" + pwd + "'"; return _db.ExceTable(strSqlCom); }
运行调试结果为:
二,在SqlHelper中的代码为:
public DataTable ExceTable(string strCom) //该方法返回一个DataTable类型 { try { SqlDataAdapter sda = new SqlDataAdapter(strCom, _sqlCon); DataTable ds = new DataTable(); sda.Fill(ds); return ds; } finally { _sqlCon.Close(); } }
运行调试结果为:
三,返回验证登录代码为:
public bool CheckLogin(string name, string pwd) { DataTable ds = new DataTable(); ds = _login.CheckLogin(name, pwd); if (ds.Rows.Count > 0) { return true; } else { return false; } }
运行调试结果为:
这是后可以显示,当输入以上条件,他将我数据库的用户表的所有用户都选出来了,则返回true,登录成功
四,防止SQL注入方法:
1》初始化参数名和参数类型:参数化方法,参数类型的指定,能提高类型安全,有效防止SQL注入
StringBuilder strSql = new StringBuilder(); strSql.Append("insert into UserInfo("); strSql.Append("UsersName)"); strSql.Append(" values ("); strSql.Append("@UsersName)"); SqlParameter[] parameters = {new SqlParameter("@UsersName", SqlDbType.VarChar,50)}; parameters[0].Value = model.UsersName;