什么是sql注入漏洞?
1、解释起来有点困难,我们直接用实际案例演示吧.首先,我们用Sql server 创建一个geek的数据库.再创建一个"表_登录"以及字段和数据.
2、创建一个C#语言Windows窗体程序.
3、创建一个和我图片差不多的界面.其中最大的文本框里面放的我们当前执行的sql语句.以便大家更明白什么是SQL注入.
4、//以下代码是点击按钮登录之后执行的代码string 连接字符串 = @"server屏顿幂垂=.;database=ge髫潋啜缅ek;Integrated Security=true"; string sql = "select count(*) from 表_登录 where 用户名='" + textBox_用户名.Text + "' And 密码='" + textBox_密码.Text + "';"; int count; using (SqlConnection 连接对象 = new SqlConnection(连接字符串)) { using (SqlCommand 执行对象 = new SqlCommand(sql, 连接对象)) { 连接对象.Open(); count = (int)执行对象.ExecuteScalar(); } } textBox_sql.Text = sql; if (count > 0) { MessageBox.Show("登录成功"); } else { MessageBox.Show("用户名或密码错误"); }
5、我们先输入错误的账号密码,看一下代码执行结果是登录失败.
6、我们再输入一下正确的帐号和密码是可以登录成功的.
7、select count(*) from 表_登录 where 用户名='sql注入漏洞' And 密码='1' or '1'='1';关键的地方来了,我们这次再输入一个错误的账号和密码,但是软件却可以显示登录成功.大家仔细观察sql语句,就不难发现,这是为什么会出现这样的结果了.sql语句漏洞是非常危险的. 管理员账号泄露,数据库被恶意删除,重要商业资料泄露等.
8、这就是由于用户刻意输入,使字符串拼接的sql语句有了新的意义,和原来的sql语句意义完全不一样了.密码应该是sql的值,但却成为了sql语句的条件.我们要杜绝这种情况,就是要让客户输入的变成值,从而避免发生这种问题!
9、sql注入漏洞攻击总结一下:在你输入数据的时候,不违背你的语法,给你创造出一些新的条件,让你完成另外一些事情.
10、那么我们如何规避这种情况呢?在以前传统的做法是检测用户的输入,过滤替换掉一些敏感的字符,比如单引号,括号.但是这也不能绝对防范.在我们C#中,微软为我们设计了一个SqlParameter类库否则使用数据库的存储过程都可以完美过滤掉.下一篇经验分享,我们来介绍SqlParameter类库的使用.