当前位置: 代码迷 >> Sql Server >> sql注入进攻
  详细解决方案

sql注入进攻

热度:94   发布时间:2016-04-24 10:20:49.0
sql注入攻击
第一种:
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注入攻击么??如果可以求附上代码,求大神解答。
------解决方案--------------------


别人一个人登录,你要把所有用户都去比一遍。几亿用户 你怎么办

第二 种。。 是最普通的。容易被人注入的。

用参数 化  ,还有处理一些特殊字符不让输入。 比哪-- ‘’ 这些,每种数据库类型都可能不太一样
------解决方案--------------------
第一种不能,但使用程序处理不合理。
第二种可以被注入攻击,加入你输入的地方没有去关键字,我可以在任意处填写:user' or '1'='1
连起来sql语句就成了:

select count(*) from biao where id='{0}' and  name='user' or  '1'='1 ‘
  相关解决方案