大白脱坑之SQL注入

幸运草 2020年3月30日19:06:22安全防范评论阅读模式

 大白依稀记得在上学的时候,老师讲JDBC操作数据库的时候提过一个词叫做SQL注入,大白记得当时老师就提了一下SQL注入,没有讲什么是SQL注入(老师:SQL注入这么重要的东西怎么可能没讲,你自己梦周公了吧!!!)

嘻嘻嘻,可能大白当时确实走神了吧,其实就算当时讲了,就凭大白这个智商,如果工作中遇不到的话基本都会还给恩师啦......

很戏剧的是工作中刚开始的两年确实没遇到有关SQL注入的事情发生,大白也很自然的彻底讲这个本就不是很熟的知识点还给了老师......

我记得老师当年说过,你不会的东西会一直在那里等着你,迟早有一天会和它不期而遇,所以早面对早解决,老师说的很有道理。因为后来我还是与SQL注入问题狭路相逢了。

事情是这样的,当时领导找到我,给我下达了一个任务,就是把项目中涉及SQL注入的地方都改掉,What are you talking about???

我只听说过SQL注入,但是什么样的代码才是SQL注入我根本不知道,说实话大白当时直接懵逼了(大白的人生只有两种状态,懵逼和去懵逼的路上)

所以先解释一下什么是SQL注入:

SQL注入其实就是利用程序员编程时产生的漏洞,通过SQL语句进行无权限访问窃取数据和篡改数据库。

怎么通过SQL语句进行SQL注入或者说什么样的代码会发生SQL注入呢?大白就以基本的JDBC为例讨论一下什么是SQL注入。

我们先准备一些JDCB的代码和数据库信息,如下图

大白脱坑之SQL注入

大白脱坑之SQL注入

上图中的JDBC就是一个简单的查询用户的方法,我们简单模拟一下SQL注入的情况

假如现在小黑同学在登录他们学校的学生信息系统,他在搜索框输入了自己的姓名和密码,成功查询到了自己的信息,如下图

大白脱坑之SQL注入

大白脱坑之SQL注入

小黑同学成功查询到了自己的信息,这本是一件皆大欢喜的事情,但是小黑想看一下其他同学的身份信息,小黑是一个聪明的同学,他通过系统的输入框在输入密码的时候他是这样输入的,如下图

大白脱坑之SQL注入

大白脱坑之SQL注入

小黑通过娴熟的拼接技巧,成功的把所有同学的身份信息给查询出来了(小黑真是个聪明的同学,但是大白对灯发誓小黑是一个正直的人)

话说为什么小黑在做了一点小动作之后,就有如此大效果呢,首先来看一下小黑在输入框输入了信息以后发生了什么吧,请看下图:

大白脱坑之SQL注入

小黑通过增加了一个条件成功获取了全部学生的身份信息,但是为什么会发生这样的事情呢?

我们都知道SQL是先编译后执行,像大白的代码中,在未进行编译的SQL中进行了参数拼接,这样就可以像小黑那样,通过参数的输入将原本的SQL进行改变,从而导致后来所执行的SQL已经不是我们所需要的SQL了。像这种通过参数拼接导致SQL语句改变的情况就是我们平时所说的SQL注入(想想真是太可怕了......)

那有没有什么方法避免这种,当然有了,其实我们只要先讲SQL进行编译,后进行参数的传递就可以了,大白可能形容的不是很明确,需要通过代码进行展示一下,如下图,大白进行修改后的代码

大白脱坑之SQL注入

从这幅图中的代码注释可以看出,大白不先将参数拼接到SQL了,而是等SQL编译完以后再进行参数的传递,我们看一下修改完以后小黑同学的愿望还能实现吗?

大白脱坑之SQL注入

大白脱坑之SQL注入

只见小黑还是按照老套路进行身份信息查询,发现已经查不到数据了,这是因为SQL在进行编译以后就不可以再改变了,输入的参数不管是什么都会被当做普通的值进行处理,所以就不起作用了(小黑同学其实还是很聪明的,起码大白没有这本事,哈哈哈哈)

今天又通过小黑的实例聊了聊SQL注入,小黑在大白的素材中背了不少黑锅,大白保证下次换个人背(哈哈哈哈)。

本文来源于:大白脱坑之SQL注入-变化吧
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草

发表评论