SQL注入的原理

Posted 黑白天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入的原理相关的知识,希望对你有一定的参考价值。

SQL注入的原理

 cn0sec   2020-02-28

Sql注入攻击
 SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。

**SQL注入实质就是闭合前一句查询语句,构造恶意语句,恶意语句被代入SQL语句执行。**

Web程序三层架构(3-tier architecture)

我们可以先来看看Web程序三层架构是如何的:

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interfacelayer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)

从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层/界面层。

数据访问层:数据访问层在作业过程中访问数据系统中的文件,实现对数据库中数据的读取保存操作。

业务逻辑层:将用户的输入信息进行甄别处理,分别保存。建立新的数据存储方式,在存储过程中对数据进行读取,将“商业逻辑”描述代码进行包含。

表示层:主要功能是显示数据和接受传输用户的数据,可以在为网站的系统运行提供交互式操作界面,表示层的应用方式比较常见,例如Windows窗体和Web页面。

我们可以用图表来理解下:

从图中我们可以知到

当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。
Web服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。
这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。

也就是说把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串最终达到欺骗服务器执行恶意的SQL命令,当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。

SQL注入攻击的简单示例:

这里我们举一个比较常见的例子来简要说明一下sql注入的原理。

假如我们有一个users表,里面有两个字段admin和password。如果我们用sql拼接的方式进行用户验证。

"select id from users where username = '"+admin +"' and password = '"  + password +"'" 这里的admin和password都是我们存取从web表单获得的数据。

那么如果我们在表单中username的输入框中输入' or 1=1-- ,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了

select id from users where admin = '' or 1=1--  and password = '123'

我们来看一下这个sql,因为1=1是true,后面 and password = '123'被注释掉了。所以这里完全跳过了sql验证。

还是那句:SQL注入实质就是闭合前一句查询语句,构造恶意语句,恶意语句被代入SQL语句执行。


以上是关于SQL注入的原理的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入原理及代码分析

试解释 SQL 注入攻击的原理,以及对数据库可能产生的不利影响。

SQL注入的原理分析

SQL注入原理与解决方法代码示例

MyBatis怎么防止SQL注入

sql注入 or 1=1的原理 啥?