什么是SQL呢
SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
- SQL数据库数据体系结构
1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
sql注入漏洞
- 简介
SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据。说白了就是在你输入数据的时候,不违背你的语法,给你创造出一些新的条件,让你完成另外一些事情 - SQL注入流程
- 首先,我们用Sql server 创建一个geek的数据库.,再创建一个"表_登录",以及字段和数据.
创建一个C#语言Windows窗体程序.
创建一个和我图片差不多的界面. 其中最大的文本框里面放的我们当前执行的sql语句.
//以下代码是点击按钮登录之后执行的代码
tring 连接字符串 = @“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("用户名或密码错误");
}
我们先输入错误的账号密码,看一下代码执行结果是登录失败.
我们再输入一下正确的帐号和密码是可以登录成功的.
select count(*) from 表_登录 where 用户名=‘sql注入漏洞’ And 密码=‘1’ or ‘1’=‘1’;
关键的地方来了,我们这次再输入一个错误的账号和密码,但是软件却可以显示登录成功.大家仔细观察sql语句,就不难发现,这是为什么会出现这样的结果了.
这就是由于用户刻意输入,使字符串拼接的sql语句有了新的意义,和原来的sql语句意义完全不一样了.密码应该是sql的值,但却成为了sql语句的条件.我们要杜绝这种情况,就是要让客户输入的变成值,从而避免发生这种问题!