什么是sql注入漏洞?
1、解释起来有点困难,我们直接用实际案例演示吧.
首先,我们用Sql server 创建一个geek的数据库.
再创建一个"表_登录"
以及字段和数据.


2、创建一个C#语言Windows窗体程序.

3、创建一个和我图片差不多的界面.
其中最大的文本框里面放的我们当前执行的sql语句.
以便大家更明白什么是SQL注入.

4、//以下代码是点击按钮登录之后执行的代码
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("用户名或密码错误");
}

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类库的使用.