比如 我们登陆的时候身份验证,一般用如下代码
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=123456");
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='pc20131234',Pwd='123456'
显然在数据库执行sql语句执行的是 select * from UserR where Id=‘pc20131234’ and Pwd='123456'
其中123456是从密码框直接获取的
如果我在密码框中输入的不是123456,而是 123'or Pwd!=' 那么执行的sql语句就是 select * from UserR where Id=‘wz’ and Pwd='123' or Pwd!= ''
执行的效果很显然 就是通过了应用程序的逻辑验证。
当然了,如何获取知道密码字段是Pwd并不在我们讨论的范畴之内。更何况现在有很多防止sql注入的方法。所以此贴主要用于菜鸟级知识普及