返回

浅谈SQL注入的危害

发布时间:2022-01-01 00:25:00 2100

SQL注入的介绍

SQL注入对于学过数据库的同学来说一定不陌生,但是它的原理和利用的方法,有的人只知道个概念,不知道它的危害性。SQL注入是一个至今都仍然存在的漏洞,它的出现可以追溯到20世纪,当时网络安全并没有那么完善,它所带来的的经济损失可想而知。

而在21世纪的今天SQL注入仍然是一个很头疼的问题,有些程序员在开发的阶段,没有对代码进行严格的过滤,就容易导致SQL注入。你可能觉得SQL注入人畜无害,至今SQL注入漏洞仍然排在CVE漏洞库中排名前十,它最单一的危害就在于,SQL注入漏洞可以通过构造数据库语句去查询你数据库中的信息,比如你的:库名、表名、字段名等等,有些公司会把客户重要的资料保存在数据库中。如果别有用心的人通过SQL注入拿到你数据库中的信息,造成的信息泄露,后果肯定很严重。

SQL注入的分类

SQL注入类型分为很多种,有包括:显错注入、POST注入、Header注入、时间盲注、布尔型盲注、宽字节注入等等。我们就拿最简单的显错注入来说吧,SQL注入的原理就是,用户输入的数据可以被当做数据库代码去执行。显错注入顾名思义,它可以通过显错的方式去把你数据库中的信息显示在浏览器中。

下面通过靶场的一个简单例子去介绍SQL注入中的显错注入。通过构造and 1=1 | and 1=2 去判断它是否存在SQL注入。

很显然它报错了,说明可能存在SQL注入

下面接着输入 order by 2 判断出它有两个字段

输入 union select 1,2 判断它的回显点是2

下面就是通过回显点去报它的库名,在union select 1,database(),也就是在2的位置加上database——>数据库,得到库名信息

接着输入: union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 去获取它的表名,也就是admin

输入:union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 2,1,得到password字段,说明它有可能就是存有重要信息的字段

输入:union select 1,password(字段) from admin(表名),得到最后的flag,到此结束!

SQL注入该如何预防

通过上面靶场的一个简单例子,你们应该对SQL注入有了初步的认知,介绍了它的危害以及利用的方法,那应该怎样去有效的预防SQL注入呢?有些人会觉得,不使用Mysql数据库就可以万事大吉了,错,每一款数据库都会存在SQL注入,也没有绝对的安全,靠的还是程序员对代码逻辑的严格审核。

常见的SQL注入修复方案:

(1)所有查询语句都使用数据库提供的参数化查询接口,并且参数化语句使用参数,而不是将用户输入变量嵌入SQL语句中。几乎所有当前的数据库系统都提供参数化的SQL语句执行接口。使用此接口可以有效地防止SQL注入攻击。

  (2)对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。

  (3)确认每个数据的类型。例如,数字数据必须是数字,并且数据库中的存储字段必须与int类型相对应。

  (4)应严格规定数据长度,以防在一定程度上正确执行较长的SQL注入语句。

  (5)网站每个数据层的编码是统一的。建议使用UTF-8编码。上下层编码不一致可能会导致某些过滤模型被绕过。

  (6)严格限制网站用户数据库的操作权限,并向该用户提供只能满足其工作要求的权限,从而最大程度地减少了注入攻击对数据库的危害。

  (7)阻止网站显示SQL错误消息,例如类型错误,字段不匹配等,以防止攻击者使用这些错误消息进行判断。

  (8)在网站发布之前,建议使用一些专业的SQL注入检测工具来及时检测和修补这些SQL注入漏洞。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线