现在的位置: 首页 > 综合 > 正文

sql注入登陆(菜鸟级)

2013年09月21日 ⁄ 综合 ⁄ 共 1051字 ⁄ 字号 评论关闭

比如 我们登陆的时候身份验证,一般用如下代码

private void Login_Click(object sender, EventArgs e)
        {
            string id=this.txt_id.Text;
            string pwd=this.txt_pwd.Text;
            //string query_Sql="select * from UserR where Id='"+id+"' and Pwd='"+pwd+"' " ;
            string query_Sql="select * from UserR where Id='"+id+"' and Pwd='"+pwd+"'" ;
            try
            {
                SqlConnection conn = new SqlConnection("server=localhost;database=test;user=sa;pwd=199009");
                conn.Open();
                SqlCommand cmd = new SqlCommand(query_Sql, conn);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                adp.Fill(dt);
                if (dt.Rows.Count != 0)
                {
                    MessageBox.Show("Login success~");
                }
                else
                {
                    MessageBox.Show("Login failed~");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }
            
        }

Sql注入就是在

string query_Sql="select * from UserR where Id='"+id+"' and Pwd='"+pwd+"'" ;这句话上通过做手脚,来混淆数据库服务器的视听。

比如当数据库服务器有一条记录Id='wz',Pwd='123456'

显然在数据库执行sql语句执行的是 select * from UserR where Id=‘wz’ and Pwd='123456'

其中123456是从密码框直接获取的

如果我在密码框中输入的不是123456,而是    123'or Pwd!='   那么执行的sql语句就是 select * from UserR where Id=‘wz’ and Pwd='123' or Pwd!= '
'  

执行的效果很显然 就是通过了应用程序的逻辑验证。

当然了,如何获取知道密码字段是Pwd并不在我们讨论的范畴之内。更何况现在有很多防止sql注入的方法。所以此贴主要用于菜鸟级知识普及


抱歉!评论已关闭.