用万能密码诠释SQL注入

一、web程序的三层架构

        要理解sql注入的原理,那么就先要了解web程序的三层架构,即客户端、服务器和数据库服务器之间的工作机制(逻辑关系大致如下图)。

1、表示层(UI,在Eclipse中是jsp) :主要是指与用户交互的界面—浏览器,用于接收用户输入的数据和显示处理后用户需要的数据 。
2、业务逻辑层(BIZ):指web服务器,是表示层和数据库访问层之间的桥梁,实现业务逻辑,具体包含:验证、计算、业务规则等。
3、数据访问层(DAO):与数据库打交道,主要实现对数据的增、删、改、查。

 二、sql注入条件

        从上图可知,客户端发送请求到web服务器后,web服务器会自主生成一段sql语句用于作用在数据库服务器上进行查询等操作。那么假如客户端发送的请求之中是一段所谓的恶意sql代码,并且web服务器收到后,并没有做出过滤等特殊处理,直接把客户端发来的请求数据包中的内容转化成一段sql语句,然后发送给数据库服务器,数据库服务器根据web服务器发来的sql语句,也没有做特殊处理,直接执行并把执行结果反馈给web服务器,web服务器收到数据库服务器反馈的内容后,没有做过滤,直接生成web界面反馈给客户端,那么客户端就可以查询到一些数据库里的一些不应该被非管理员看到或者操作的东西。
        以上的假设,就是一个sql注入,由上可以看出,完成一次sql注入需要满足三个关键条件:

        第一就是要有恶意的sql代码语句;

        第二就是web服务器对于客户端发来的请求以及数据库服务器反馈的内容没有做出识别和过滤;

        最后就是数据库服务器对于web服务器发来的sql语句没有做出识别过滤.

        这三个关键条件,除了第一个是攻击者掌控的,剩余两个关键点都是web开发者要尽可能掌控的。
        是不是觉得要web服务器和数据库服务器都对恶意sql代码不做反应很不可能?
        确实,随着服务器性能的进一步提升,在如今的现实情况下,基本上日常常用的网站,都已经把防sql注入做得很好了,但没有绝对安全的代码,保持警惕还是很有必要的,而且很多小网站,由于运营方资金精力等原因,往往对于网站的防护做得并没有那么好,就存在注入漏洞。

三、SQL注入攻击一般流程:

1、正常流程

比如在一个登录界面,要求输入用户名和密码:

 

 

2、万能密码流程

        点登陆,如若没有做特殊防范,那么这个非法用户就很得意的登陆进去了。(当然现在许多数据库API已经做了积极防范)

        这是为什么呢? 下面我们分析一下,分析SQL语句:

        条件后面username=‘‘or 1=1 ,用户名等于 ” 空或1=1 这个条件是绝对成功的;

        然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。最后执行的实际语句是:

 四、SQL注入的实质:

        从以上实例的过程讲解中,我们就可以更清楚的了解SQL注入的实质。

五、防范

(1)参数化语句:将查询语句参数化,来防范SQL注入;

(2)输入验证:通过白名单和黑名单的验证对用户的输入进行验证;

(3)输出编码:对程序各个模块之间或者各个部分之间传递的数据进行编码处理;

(4)规范化:拒绝所有不符合规范的输入和对输入编码进行解码分析,是常见的两种规范化处理方法;

(5)避免SQL注入漏洞的程序设计:使用存储过程、处理敏感数据等;

(6)安全的编码规范:根据OWASP提供的安全编码规范进行相关编码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值