SQL注入介绍:原理、触发方式及危害解析

检测维修 0 89

一、什么是SQL注入

SQL也就是结构化查询语言,它被用来操作关系型数据库管理系统。当下,多数的Web编程语言都提供了操作SQL 的接口,目的是便于和数据库实现交互。然而在开发Web应用之际,鉴于忽略了代码的健壮性以及安全性, 攻击者能够构造出巧妙的SQL语句进而获取到敏感数据,所以致使了SQL这种攻击方式得以流行。

二、SQL注入的原理

于B/S模式里,用户能够借由Get或者Post等途径,朝着服务器发出HTTP请求。在服务器那边,针对数据库开展查询操作,把查询所得的结果返回到浏览器端。黑客借助上述流程,把精心构造好的请求置于传入的变量参数内,致使服务器端运行恶意代码,进而达成了读取数据库里敏感信息的成效,甚至把数据库给删除掉。这般的攻击过程便是SQL注入,其原理如图呈现的那样。

从访问流程这一角度来看,攻击者跟普通用户不存在任何差异,都是把数据发送至服务端,服务端对数据予以处理而后返回结果。然而攻击者对输入数据做了精心处理,在执行SQL语句操作之际,效果就会跟正常流程全然不同,进而达成获取整站数据的成效。

三、触发SQL注入的方式

攻击者通常可以使用以下几种方式来触发SQL注入漏洞:

(1)通常借助HTTP的GET或POST请求去传输用户数据,通过对POST包中的数据予以修改,或者对GET请求里URL参数值加以改变,进而达成恶意代码注入。

(2)经由HTTP请求头,服务器端存在保存用户IP以及User - Agent等信息的可能性,在这种情况下,攻击者能够于X - Forwarded - For或者UA等请求头字段之中构造语句来实施SQL注入。

(3)对二阶注入来说,那是攻击者先去在HTTP请求里提交恶意输入,之后服务端会把恶意输入来保存在数据库当中,紧接着,攻击者再次提交第二次HTTP请求。就处理第二次请求这事的话说,服务端得去查找数据库,如此一来是触发了之前存下的恶意输入,然后将结果返回给攻击者。攻击者必须得通过两次独立请求才能够达成SOL注入的目的,所以这种攻击方式就被称作二阶注入。

四、SQL注入的特点

SQL注入具有以下特点:

(1)变种数目繁多。在页面能够返回错误信息的情形下,能够运用基于错误的这种注入方式。要是服务端针对返回的错误实施过滤操作,那么能够运用基于布尔或者基于时间的这种注入方式。此外,技术娴熟的攻击者会适度对攻击参数予以调整,借此绕过特定字段的检测,致使传统的特征匹配方法无法检测出注入。

(2)开展攻击这件事变得简便了,当下网络里流行着各种各样进行开发的SQL注入工具,这致使发动攻击所需要跨越的门槛大幅下降了,哪怕是完全没有经验的“脚本小子”,依靠这些工具也能够针对目标网站开展攻击活动。

(3)危害程度颇高。一旦攻击者成功得手,情况较轻时会获取整个网站的敏感数据情况严重时则会写入木马进而控制整个服务器破坏力极其巨大。在近几年OWASP公布的Web应用十大安全漏洞排名里SOL注入稳固占据榜首4。尽管其原理以及利用方式并非复杂然而对目标网站所造成的破坏力十分巨大。

五、SQL注入的危害

sql注入攻击方式_sql注入漏洞检测工具_sql注入原理

(1)攻击者能够不经过授权就对数据库里的数据进行访问,将用户的隐私以及涉及个人的信息给盗取,致使出现用户信息被泄露的情况。

(2)针对于数据库当中的数据,能够开展增加或者删除的操作,就好比私自去添加或者删除管理员账号这样的行为。

(3)要是网站目录有着能够写入的权限,那就能够写入网页木马,攻击者接着就能够对网页予以篡改,去发布某些违法信息之类的。

(4)顺着提权等一系列步骤,攻击者将服务器的最高权限给弄到手了。能够远程操控服务器的攻击者,安装了后门,进而达成修改或者控制操作系统之目的。

六、SQL注入的漏洞检测

SQL注入漏洞的检测划分成手动检测以及自动检测,手动检测乃是安全测试人员针对某个特定区间的URL开展手工注入测试,自动检测则是依靠爬虫去爬取网站的所有链接,针对所有链接自动实施注入测试,在大型应用里,手动检测的工作量极为巨大,一般会采用自动检测的方式。

七、SQL注入的防御手段

核心思想是防御SQL注入,这一思想重视对用户输入的数据展开严格检查,还要针对数据库。

采取最小权限分配原则来予以使用。当下,存在着这样几种SQL注入的防御手段:

(1)依据攻击特征来进行匹配以实现过滤行动,这是当下运用最为广泛的一种方式,系统会把攻击特征制作成数据库,一旦匹配到这些攻击特征,便会认定检测到SQL注入情况,这种方式能有效地过滤大部分SQL注入攻击,然而却极大地增加了程序的复杂度,同时有可能对业务的正常查询产生影响。

(2)按所说的对用户输入开展转义。比如说,较为常见的SQL注入语句里都有“‘’”,借由转义使“‘’”转换成“/” 这样一来,SQL注入语句就无法达成攻击者预先期望的执行成效,进而实现对于SQL注入予以防御。

(3)对数据类型予以严格的定义,对数据长度加以确切的规定。比如说,查询数据库里某一条记录的id,将其定义成整型,万一用户所传来的数据不满足相应条件,那就得对数据实施过滤。数据长度同样应当作出严格的限制,如此能够防止较长的SQL注入语句。

(4)严格限制网站访问数据库的权限。

(5)在近些年头几年里,伴随机器学习跟着同人工智能技术一块儿变得火热起来,基于机器学习的用于检测SQL注入的方法变成了全新的研究方面方向。先是首先会把样本SQL语句转变转换成为特征向量集合,运用使用机器学习的办法方式来进行训练,把获得得到的模型投入到使用当中,借助利用训练好的模型去检测传入的数据是不是是否包含恶意SQL注入标点符号。

(6)其余的防御举措,比如说,要避免网站呈现出SQL执行出现错误的信息,以此来防止攻击者运用基于错误的形式去实施注入;并且,每个数据层的编码都要保持统一,进而防止过滤模型被绕过等等。

Web应用程序出现SQL注入情况,常常是由于在程序编写进程中,开发人员违反了“代码与数据分离”这一原则。一方面,攻击者能够随意去进行输入数据的更改;另一方面,攻击者能够在数据之间构造代码,以此让服务器端将数据解析成代码来执行。所以,只要遵循“代码与数据分离”原则,针对用户端传入的数据展开严格检查,从技术层面来讲,能够达成完全防御SQL注入攻击。

谈到这里,这一篇关乎SQL注入以及危害、防御手段的处理办法的文篇就讲述到这儿了,更多有关SQL注入的内容,若要查找,可搜寻脚本之家以往的文篇,或者持续浏览下面相关的文篇,期望大家往后多多给予脚本之家支持!

相关推荐: