今天给大家讲解下关于PHP代码审计的SQL注入,sql注入这个漏洞,我们可以说是经常能遇到的,那么这个漏洞它在代码层面它是怎么样的一个效果,它是如何产生的,我们又该如何去防御,下面我们就和大家一起来看一看它在代码里面是以什么样的一个形式来产生的。这边我们也搭了一个简单的一个小靶场。模拟一下后台的一个登录框,我们在这边正常的输入我们的用户名密码,这边提示登录失败,说明我们的用户名密码不对。如果它这里登陆框产生了SQL注入的话,我们这边执行我们精心构造的一个恶意语句,然后密码我们可以随便输,这边点击登录,可以看到这边是已经登陆成功,绕过了他一个登录的一个防护,成功进入到他的后台。那么这个漏洞在代码层面里面是怎么展示的,我们下面就可以一起来看一看他的源码。好,这个就是刚才那个小靶场的一个源码,可以看到代码也是非常的少。这边我们可以一起来看一下,这里就是我们登录框,就是我们登录框传入的用户名,他这边进行了一个接收,然后密码也是一样。然后第七行这边对我们传入的用户名和密码进行了一个sql语句的一个拼接,那拼接的过后,然后他这边利用query这个函数,执行了我们的SQL语句,执行过后返回一个数组。
这个数组里面就是我们执行的一些数据一些信息,然后他用这个函数来判断这个数组里面是否有信息,如果有信息的话,这边就返回一个true然后这边就进入这个 if的判断,成功登录,如果不是的话,它就会返回一个false这边也就到达了一个登陆失败的一个效果。SQL注入它是在哪里产生的,就是在这一段里面产生的,因为它在这里对我们的一个传入的一个字符串进行了一个拼接的一个操作,然而它并没有对我们传入数据进行一个过滤进行一个验证。
那么我们传入的数据在这里面和它这个单引号闭合过后,就会产生一段新的语句,我们可以输出给大家看一下,这边我们把它的sql、语句进行一个输出打印,这样我们看的比较清楚。我们这边输入正常的用户名,密码,可以看到这边返回来是这么一条语句,可以拿过来看一下这条语