WEB系统中SQL注入防御方法的研究

2015-03-31 16:05焦玉华
大众科技 2015年4期
关键词:工商学院攻击者语句

焦玉华

(山东工商学院,山东 烟台 264005)

WEB系统中SQL注入防御方法的研究

焦玉华

(山东工商学院,山东 烟台 264005)

SQL注入风险已成为WEB应用最大的安全隐患之一,通过介绍SQL注入的本质及特点,详细分析了SQL注入的一般思路和实现方法,最后从服务器IIS设置、数据库设置和程序编写三个方面提出了针对SQL注入的防御措施。

网络安全;SQL注入攻击;SQL注入点

1 引言

随着WEB技术的迅速发展,基于B/S结构的WEB应用得到了广泛的普及,涉及到教育、金融、社交等多个领域,这使得其安全问题备受关注。在OWASP(开放式web应用程序安全项目)研究公布的WEB应用程序最可能、最常见、最危险的十大安全隐患中,SQL注入风险位居前列,并因其普遍程度高,危害程度大,成为目前主要的WEB应用攻击方法之一。本文以ASP+SqlServer为例,介绍SQL注入的过程和防御方法。

2 SQL注入概述

2.1SQL注入的本质

SQL注入攻击就其本质而言,就是攻击者利用SQL语法的特点,针对应用程序开发者编程过程中没有对用户的输入数据进行合法性验证的漏洞,向应用程序中插入一些SQL语句来实现对数据库未经授权的访问和检索,根据WEB页面返回的结果,获得自己想要的数据。

2.2SQL注入的特点

(1)攻击的广泛性。由于SQL注入是利用的SQL语法,因此在理论上讲,只要支持SQL语言标准的数据库软件都有可能受到SQL注入的攻击,例如MS Sql Server、Mysql、Oracle、DB2等。

(2)技术门槛低。SQL注入的原理相对简单,易于掌握和实施。只要有SQL语法基础的人都可以进行SQL注入攻击,同时还有很多专门的SQL注入工具,例如SQLMAP、HDSI,这样即使完全不懂编程、不懂 SQL语法的人的都可以进行SQL注入攻击。

(3)隐蔽性强。SQL注入攻击是通过正常的WWW端口访问数据库,语法结构也是正确的SQL语句,与正常的页面访问完全一样,因此这种攻击可以顺利地越过防火墙而不被发现。

3 SQL注入的实现

SQL注入的一般思路是首先判断 WEB应用是否存在SQL注入漏洞,即寻找注入点,判断后台数据库类型,再确定XP_CMDSHELL可执行情况,进一步发现WEB虚拟目录,最后上传ASP木马,得到管理员权限。

3.1查找SQL注入点

HTTP协议的请求方法中,常用到GET和POST两种。GET方法是把参数数据队列加到提交表单的ACTION属性所指的URL中,从服务器上获取数据。POST方法将表单内各个字段与其内容放置在 HTML HEADER内一起传送到ACTION属性所指的URL地址,是向服务器传送数据。SQL注入点最可能出现的地方就是使用GET和POST方法与服务器交换数据的地方。常用的手工查找SQL注入点的方法有以下两种:“加单引号”法 和“1=1、1=2”法。

3.2利用SQL注入点进行注入攻击

下面以用户登录验证模块为例,说明SQL注入攻击的实施过程。在登录验证的程序中,通常用的SQL语句为:select * from usertable where username=‘admin’and password=’123’。如果攻击者以“admin’or 1=1 --”作为用户名输入时,SQL语句变为:select * from usertable where username=‘admin’or 1=1 -- and password=’123’,“--”在SQL语法中是注释符,其后面的语句都会被注释掉,不会被执行,而“or 1=1”恒为真,这使得 where条件判断也恒为真,攻击者就可以跳过用户验证顺利进入系统。

4 SQL注入的防御方法

针对SQL注入攻击的本质和实现方法,从服务器IIS设置、数据库设置和程序编写三个方面分析如何防御SQL注入。

4.1服务器IIS设置

程序员在编写或调试程序时,IIS会把详细的代码错误信息反映在WEB页面中,让程序员能够迅速的发现程序的问题所在,而攻击者恰恰也可以利用这个错误信息发现系统的漏洞。因此在WEB系统发布后,在IIS的配置调试选项卡中,选择“向客户端发送下列文本错误信息(T)”选项,定义一个统一固定的错误提示,替代详细的错误提示,这样可以在一定程度上减少注入试探。

4.2数据库设置

猜测表名、字段名也是SQL注入的一种方法,因此在数据库的命名上要做到标准规范,避免用 admin、username、password等常见词作为表名或字段名。WEB应用连接数据库时,要遵循“最小权限准则”,坚决不能用sa权限的用户连接数据库,对表的select、update、delete操作权限要做精确的设置。

4.3程序编写

程序员编写程序时不规范、不严谨,是 WEB应用存在SQL注入点的主要原因,应该从以下四个方面去规范程序编写,减少系统漏洞。

4.3.1对用户的输入进行合法性验证

(1)限定用户输入的字符串长度。这个方法简单易操作,可以有效地防止攻击者构造较长SQL语句插入到WEB应用中。可以通用设置文本字段的 maxlength属性来实现,也可以通过函数len()进行判断。

(2)屏蔽或替换特殊的符号。在SQL注入中,单引号、括号、注释符号、空格、双引号等都是常用的特殊符号,可以根据实际情况将这些特殊符号屏蔽掉,也可以用replace()替换成全角或中文符号,使恶意的SQL语句无法插入到系统中。

(3)对系统的输入要求做专门验证。

在WEB应用的输入设计中,对有些输入的内容要求比较具体,例如只允许输入数字、字母、汉字或者它们的组合等,可以利用或者构造相应的函数去验证,我们以只允许输入数字为例:通过IsNumeric()或者ASC()判断ASCII码值来确定输入是否为数字,也可以利用正则表达式“^[0-9]+$”来判断。

4.3.2使用参数化查询

部分程序员在编写程序时,为了省时省力,以字符串拼接的方式构建SQL语句,导致系统中存在SQL注入隐患,而参数化查询是目前最有效的预防SQL注入攻击的方法。参数化查询是指程序链接并访问数据库时,在需要填入数据的地方,使用参数来赋值。在使用参数化查询的情况下,数据库不会将参数的内容当做SQL指令的一部份来执行,而是先进行SQL 指令的编译,再套用参数执行,这样即使参数中含有恶意的指令,也不会被数据库执行。同样以登录验证为例,使用参数化查询来实现:

dim rs,cmd,cn

set cmd=server.CreateObject("adodb.command")

set cn=server.CreateObject("adodb.connection")

set rs=server.CreateObject("adodb.recordset")

cn.Open"DRIVER={SQL Server};SERVER=服务器;UID=用户名;PWD=密码;

DATABASE=数据库"

cmd.activeconnection=cn

cmd.commandtext="select*fromusertablewhere username=? and password=?"

cmd.commandtype=1

cmd.prepared=true

cmd.parameters.append

cmd.createparameter("username",adVarChar,

adparaminput,10)

cmd.parameters.append

cmd.createparameter("password",adVarChar,

adparaminput,10)

cmd.parameters("username")=request.form("username")

cmd.parameters("password")=request.form("password")

rs=cmd.execute

在程序编写中,除了上述方法,还可以对数据库的重要数据进行MD5加密,记录跟踪攻击者的IP和攻击行为,利用专门的扫描工具查找系统的注入漏洞。

5 结语

SQL注入攻击是攻击者广泛使用的一种攻击手段,严重威胁着应用程序的安全。因此,WEB应用的开发人员和维护人员必须要掌握SQL注入攻击的常用方法和防御措施,在程序开发时要合理设计,规范编程,尽量完善代码避免漏洞,这样才能保护系统的安全,远离SQL注入攻击的危害。

[1] 王云,郭外萍,陈承欢.Web项目中的SQL注入问题研究与防范方法[J].计算机工程与设计,2010,(5):976-978.

[2] 陈逊.SQL注入攻击原理与防范[J].电脑知识与技术,2008,(3):12.

[3] 黄明辉.基于SQL Server的SQL注入攻击防范方法[J].计算机安全,2008,(8):122-124.

The study of WEB SQL injection defense system method

SQL injection risk has become one of the biggest security risks WEB application, the nature and characteristics through the introduction of SQL injection, a detailed analysis of the general ideas and methods SQL injection, and finally write IIS settings from the server, database settings and procedures for the three areas the defense against SQL injection.

Network security; SQL injection attacks; SQL injection point

TP393.08

A

1008-1151(2015)04-0003-02

2015-03-13

山东工商学院青年科研基金项目(2012QN203)。

焦玉华(1979-),男,河南卫辉人,山东工商学院工程师,研究方向为教学管理。

猜你喜欢
工商学院攻击者语句
机动能力受限的目标-攻击-防御定性微分对策
四川工商学院简介
四川工商学院简介
四川工商学院简介
四川工商学院简介
重点:语句衔接
正面迎接批判
有限次重复博弈下的网络攻击行为研究
如何搞定语句衔接题
作文语句实录