比如 我们登陆的时候身份验证,一般用如下代码
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注入的方法。所以此贴主要用于菜鸟级知识普及