前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >SQL注入的原理

SQL注入的原理

作者头像
黑白天安全
发布2020-03-08 16:53:50
发布2020-03-08 16:53:50
79100
代码可运行
举报
运行总次数:0
代码可运行

SQL注入的原理

cn0sec 2020-02-28

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

代码语言:javascript
代码运行次数:0
复制
**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拼接的方式进行用户验证。

代码语言:javascript
代码运行次数:0
复制
"select id from users where username = '"+admin +"' and password = '"  + password +"'" 这里的admin和password都是我们存取从web表单获得的数据。

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

代码语言:javascript
代码运行次数:0
复制
select id from users where admin = '' or 1=1--  and password = '123'

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑白天实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL注入的原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档