APP下载

web安全之SQL注入漏洞及其防御

2017-11-17罗丽红杨华琼

网络安全技术与应用 2017年11期
关键词:语句漏洞页面

◆罗丽红 柯 灵 杨华琼

(重庆电讯职业学院 重庆 402247)

web安全之SQL注入漏洞及其防御

◆罗丽红 柯 灵 杨华琼

(重庆电讯职业学院 重庆 402247)

随着基于web2.0的互联网应用的广泛使用,web的安全问题也日益突显,根据OWASP的2013和2017的调查,其中注入攻击一直排名第一。本文意在对SQL注入的常用方法进行列举,系统的分析了SQL注入的原理,从而对SQL注入漏洞提出了一些基本的防御策略。

SQL注入;web安全;防御

0 引言

在web2.0时代,基于web的互联网应用越来越广泛,比如大家熟知的百度百科、博客、土豆网等,除这些应用之外企业在信息化过程中的各种应用也都架设在了web平台上。伴随着Web业务的迅速发展,web的安全问题也凸显了出来,其中黑客会利用web服务程序的SQL注入漏洞得到web服务器的控制权限,进行一系列非法操作,对系统和用户信息造成威胁。根据OWASP于2017年公布的Web应用程序最可能、最常见、最危险的十大漏洞的排名注入攻击漏洞排在首位。

1 介绍web攻击手段之一SQL注入

什么是SQL注入漏洞?指的是利用现有应用程序,将恶意的SQL命令拼接到字符串中,然后插入到web表单提交或输入域名或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令,从而得到攻击者想要的信息。

首先为了 IE浏览器能提示更多的服务器错误信息,第一步需要把internet选项高级设置中“显示友好HTTP错误信息”前的勾去掉。

1.1 检测是否存在SQL注入:在网站URL后面加上单引号’

在网站 URL后面加上单引号后,比如输入:www.***.com?id=1’,这样就在URL中传递了变量id,并提供了值1,这样就嵌入了恶意的SQL语句,对数据库进行了动态请求,服务器会返回错误的提示信息,如:“Microsoft JET Database Engine 错误 '80040e14',字符串的语法错误,在查询表达式'id=1'' 中。/showdetail.asp,行10”。从该错误提示信息中可以得出:(1)该网站用的是 JET引擎连接的数据库,而不是 JDBC或 ODBC,所以使用的是 access数据库;(2)该网站没有对客户提交的参数进行过滤,存在注入;(3)表中存在“id”字段名。

从上面服务器的错误提示可以看出,可以从客户端提交的特殊代码,收集提示信息,得到想得到的资料,这就是SQL注入的原理。

1.2 检测是否存在SQL注入:在网站URL后面分别加上1=1或1=2

不管是数字型、字符型还是搜索型注入都可以通过输入不同的字符后利用 Web页面返回的信息判断是否存在注入漏洞。下面举的是当存在数字型注入的情况下的例子:从原有网站“www.***.com?id=1”展示的 URL信息,可知该网站使用了 id这个字段,并且有1这个字段值。然后再在浏览器的地址栏中分别输入www.***.com?id=1 and 1=1、www.***.com?id=1 and 1=2,如果输入前种URL页面返回正常,加上1=2之后网站报错,此时可以判断该系统存在SQL注入漏洞。

因为在后面加上“and 1=1”后,原来的查询语句可能是这样的“select * from 表名 where id=1 and 1=1”,由于1=1条件成立,所以执行且页面返回正常。在后面加上“and 1=2”,原来的查询语句可能是这样的“select * from 表名 where id=1 and 1=2”,因为1=2条件不成立,所以会导致页面加载出错。

1.3 根据获得的信息得到关键字段的值

根据页面反馈信息猜测得到注入数据类型、表名、字段名后,再利用SQL语句得出关键字段的值。先利用order by语句来判断字段的长度,如果临界值为7,则在页面注入 order by 7时则会报错,从而猜测列数为6。再向URL栏注入“and 1=2 union select 1,2,3,4,5,6”后会将数据库的列显露在网页上。注 select后面跟的列要与通过order by猜出的列一致。再利用报错字段查看数据库名等基本信息。

2 防止SQL注入的有效方法

为了减少SQL注入漏洞带来的损失,应采取有效的方法来防御SQL注入漏洞。

2.1 对数据库的报错信息进行处理

当进行恶意的SQL查询时,黑客会尝试在SQL注入时构造一些查询语句,使进行查询时出现语法或逻辑上的错误,这些查询出错的信息往往是切入点,会提供给黑客大量信息,所以需要对这些错误进行处理,避免网站显示类似下面的这些信息,如:类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

2.2 采用参数化查询防御SQL注入

将SQL语句预编译并绑定变量,如下代码所示,将id后面的参数预先编译好,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中,则不管输入什么参数都无法改变本身的语法结构。

2.3 对用户输入内容进行限制

对用户输入的内容进行限制,限制用户提交非法数据,确保数据合法。可以采用对数据类型进行验证或用正则表达式来验证输入。

比如特殊字符:’”<>&*;等都具有特殊的意义,最常见的SQL注入的特殊符是单引号,因为单引号是作为代码与用户输入数据的字符串分隔符,单引号内部的内容是用户输入的数据,外部为SQL代码。在URL栏或提交参数的表单中,如果没有加入过滤特殊字符的代码,并没有对数据库抛出异常进行处理,则数据库遇到单引号注入后,会认为是语法错误,并抛出错误提示,对经验丰富的黑客来讲这些信息往往是具有价值的。

比如清除掉所有特殊字符的正则表达式:

3 总结

SQL注入漏洞从1998年被发现后,直到现在还仍然会对web应用的安全产生极大危害。OWASP在2017年公布的十大最流行web安全漏洞中注入漏洞居榜首,这就更加证实了这一点。本文列举了SQL注入的常用方法,分析了注入原理,并给出了三点建设,希望能降低SQL注入漏洞攻击的概率。

[1] Bitcarmanlee.Web安全之 SQL 注入攻击技巧与防范[EB/OL].(2016-03-01)[2017-01-09].http://blog.csdn. net/bitcarmanlee/article/details/50945437. Bitcarmanlee.Web Security SQL Injection Attack Skills and Prevention[EB/OL].(2016-03-01)[2017-01-09]. http://blog.csdn.net/bitcarmanlee/article/ details/50945437.

[2] 吴为团,郑海燕,张锐丽.基于 Web应用程序的 SQL注入攻击和防范[C].中国通信学会学术年会,2015.

[3] 马俊,段兴林.Web应用系统中SQL注入的分析与预防[J].信息技术,2015.

[4] 魏星.基于手工SQL注入的web渗透测试技术研究[D].山西:中北大学,2015.

猜你喜欢

语句漏洞页面
漏洞
刷新生活的页面
答案
重点:语句衔接
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
我喜欢
Web安全问答(3)
作文语句实录