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