MySQL数据库的安全讲义

  

,,,,,

其实数据库安全就那点事,SQL注入。现代Web数据安全方面,相当一部分公司其实并不重视数据安全的问题,据国外统计超过一半的网站可能存在SQL注入漏洞。
,,就说最近的例子,2016年11月30日某某著名公司发送短信邀请本人参加云产品峰会,收到邀请的二维码短信的url,这个url的IP地址就是管理后台就不说了(大家应该知道是谁了,看完本文* * *他人网站的,自负责任)。在用户名输入框中直接输入或1=1,连密码都不需要输入,超级管理员验证通过,直达管理员后台。
,,话说,SQL注入漏洞这个事,能怪谁呢?
,,能怪整天整宿忙碌于擦屁屁的运维吗?能怪搞数据库的DBA吗?
,,严格地说,他们都有责任搞好安全这点事。不过,说到本质,还真与他们没有什么关系。
,,有时候,程序在输入框做好可疑字符过滤,甚至就多加一点逻辑判断,安全就能完全避免的事。但是他们为什么就不做这个检查呢,是人安全意识问题,还是对SQL注入不了解呢?
,, SQL注入漏洞的本质原因并不是在运维工作层面有多大的疏忽,而是程序员没有做好过滤和逻辑上的问题。为什么?

 MySQL数据库的安全讲义”>,,</p> <p>我们先要明确SQL漏洞* * *是怎么定义? SQL漏洞* * *,本质上就是如何充分利用程序的逻辑来为* * *者完成他们想干的事情。<br/>,,所以,* * *们能不能搞,是程序的问题,程序能不被* * *们当做傻子,叫它干什么事,它就干什么事,甚至有个洞就能干出点东西来。<br/>,,这才是SQL注入漏洞的利用本质。比如,某些会议门票之类的,捣蛋鬼想要票还不要钱,甚至还想倒卖门票,想登录管理员后台,怎么搞? <br/>,,这明显非法,大家都不是傻子,这并不是你想登就能登的,对不对吗?但是总得找出个“傻子”出现才行,而捣蛋鬼又从来不按常规出牌。我们又如何防范这种捣蛋鬼呢? <br/>,,就登录网站这回事吧,都要输入用户名和密码进行验证,大家皆知的常识。假设这里就只有两个输入框:用户名和密码,那如何绕过这种验证呢? <br/>,,那我们就先看看绕过用户名和密码验证的原理是什么?当我们输入用户名:hxf,密码是:123年,程序会保存到变量中,美元uname=& # 39; hxf # 39;,通过美元=& # 39;123 & # 39;。这时候点击登录,就会把用户名和密码数据提交给程序。<br/>那么被当作傻子的程序是如何进行逻辑判断的呢?我们看看类似如下的过程:<br/>,,首先执行一个SQL语句,比如SQL=皊electcount(*)从用户那里uname=$=$ uname和密码pass,我们咋一看这个判断过程好像也没有什么问题。那我们来看捣蛋是怎么捣蛋的?
,直接在用户名的输入框输入:1 & # 39;或1=& # 39;1 & # 39;;#,密码输入框不需要填写任何字符,直接回车。这样直接验证通过,到达管理员后台,轻松获得网络管理员权限,当然还有其它效果一样的输入。
,,为什么这样可以得到Web管理员权限呢?我们来把动作分解一下。
,,当捣蛋鬼在用户名输入框输入:1 & # 39;或1=& # 39;1 & # 39;;#,那么传到程序处理加单引号后变成:美元uname=? # 39; 1 & # 39;或1=& # 39;1 & # 39;“,通过美元=啊?这种结果传到SQL语句在数据库中执行就会是这样:select count(*)从userswhere uname=& # 39; 1 & # 39;或1=& # 39;1 & # 39;;#和密码=啊?大家可以执行在一下,这条结果明显把逻辑改变了,结果不可能为空,或的逻辑永远为真,结果不可能为空。非空即为真,管理员登录成功,尤其是表中只有一个管理员的情况更糟糕了。

  

MySQL数据库的安全讲义