第一种:
DAL层
public DataTable DengLu()
{
StringBuilder sql = new StringBuilder();
sql.Append("select * from T_manager");
return DAL.DbHelper.ChaXun(sql.ToString());
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
后置代码
private void btn_OK_Click(object sender, EventArgs e)
{
if (txt_M_id.Text.Trim() == "")
{
MessageBox.Show("请输入登陆账号!!!", "系统消息");
txt_M_id.Focus();
}
else if (txt_M_pass.Text.Trim() == "")
{
MessageBox.Show("请输入登陆密码!!!", "系统消息");
txt_M_pass.Focus();
}
else
{
BLL.T_manager bll = new BLL.T_manager();
DataTable dt = bll.DengLu();
for (int i = 0; i < dt.Rows.Count; i++)
{
if (txt_M_id.Text == dt.Rows[i]["M_id"].ToString() && txt_M_pass.Text == dt.Rows[i]["M_password"].ToString())
{
//MessageBox.Show("登陆成功!!!", "系统消息");
zhuchuangti zct = new zhuchuangti();
zct.Show();
this.Visible = false;
}
else
{
MessageBox.Show("账号或密码错误!!!", "系统消息");
}
}
}
}
第二种:
string sql = string.Format("select count(*) from biao where id='{0}' and name='{1}'",id,pwd);
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
int a =(int)cmd.ExecuteScalar();
if (a> 1)
{
MessageBox.Show("用户不存在");
}
else
{
MessageBox.Show("登录成功");
}
这两种写法还存在sql注入攻击么??如果可以求附上代码,求大神解答。
------解决方案--------------------
![](/img/2014/07/17/13442392.gif)
别人一个人登录,你要把所有用户都去比一遍。几亿用户 你怎么办
第二 种。。 是最普通的。容易被人注入的。
用参数 化 ,还有处理一些特殊字符不让输入。 比哪-- ‘’ 这些,每种数据库类型都可能不太一样
------解决方案--------------------
第一种不能,但使用程序处理不合理。
第二种可以被注入攻击,加入你输入的地方没有去关键字,我可以在任意处填写:user' or '1'='1
连起来sql语句就成了:
select count(*) from biao where id='{0}' and name='user' or '1'='1 ‘