基于SQL注入的Web应用程序安全性研究
所属栏目:信息安全论文
发布时间:2014-02-19 11:58:19 更新时间:2014-02-19 11:37:18
随着互联网的普及应用,Web应用系统广泛应用到各个领域。但由于Web应用系统的功能丰富、便于传播、通用性强等特点,导致它容易为网络黑客所攻击。1998年第一次有人发现SQL注入,此后研究人员开始注意SQL注入的危险性,而且之后SQL注入进行攻击的事件愈演愈烈。
【摘要】SQL注入是对Web应用程序造成威胁非常流行的一种攻击方法,本文从SQL注入的原理技术进行分析,介绍如何从多个角度防止SQL注入,更好的维护Web应用程序的安全。
【关键词】SQL注入,安全,研究
1引言
近几年发生几起SQL注入比较有名的事件,2009年12月,黑客利用SQL注入漏洞攻击RockYou数据库获取用户密码信息;2010年9月,瑞典选民在选举阶段内通过SQL注入攻击选举;2011年,黑客利用SQL注入漏洞从诺基亚网站盗取用户信息;2012年,MMORPG游戏网站被黑客SQL注入攻击。越来越多利用SQL注入攻击非法获取经济利益,任何网站或应用中的一个SQL注入漏洞都很有可能受到黑客的攻击。
2SQL注入技术分析
SQL是访问数据库服务器的标准语言,几乎所有的Web应用都需要与数据库打交道,势必用到SQL语言。SQL的典型操作“查询”可以获取数据库的“查询结果记录集”,并且SQL语句可以对数据库的结构或数据进行操作和修改,如果攻击者利用SQL语句进入Web应用程序的数据查询,SQL注入攻击就有可能发生。
当Web应用程序的开发人员对cookie或用户输入的参数等数据不进行过滤或验证就直接传递值给SQL查询语句时,SQL注入漏洞就开始存在了。
(1)SQL注入漏洞原因
一条典型的SQL语句:
statement:="SELECT*FROMusersWHEREname='"+uName+"';"
这段代码的目的是将某个特定用户从用户表中取出,但如果用户名被恶意用户用特定方式伪造,这条语句的执行操作就完全违反了作者的期望。比如,将用户名这个变量(uName)输入为:
u'or'a'='a'
这样写的目的是,name='uName'的要求就变成了name='u'?or?'a'='a',单引号刚好闭合,此时原始语句变为:
SELECT*FROMusersWHEREname='u'or'a'='a';
此代码被用于认证过程的话,如上输入能够强迫选择合法的用户名,因为赋值'a'='a'永远为真。
如此的SQL注入除了可以获取正确的用户通过外,还可以利用这一点删除表、或者获取表中所有的数据等。
(2)SQL注入的危害
攻击者可以利用SQL注入任意增、删、改或查数据库中的数据,获取数据库中存放的个人密码、消费记录等敏感信息;可以通过这种方法获得管理员的权限操作数据库;如果攻击者利用SQI注入执行一些系统的命令的话,他们可以获得整个系统的控制权,后果可想而知。
3SQL注入的安全防范
(1)参数化方法
参数化方法是指在数据提交的地方不直接进行赋值,而利用参数来进行值传递。使用参数化方法,在DBMS对SQL语句完成编译后,才载入参数运行语句。即便参数的传递中含有指令,也不会被运行。
使用参数化查询技术,数据库服务器不会将参数的内容视为SQL指令的一个组成部分来处理,在数据库系统完成对SQL指令的编译后,再载入参数运行.因此,即使参数中含有指令,也不会被DBMS编译运行。示例1:
……
sql.CommandText="select*fromuserswhereuname=?andpword=?";
//构造SQL语句,根据的用户名和密码在用户表中查找记录
sql.Parameters.Append(cmd.CreateParameter("@uname",200,1,20,"abc"));
sql.Parameters.Append(cmd.CreateParameter("@pword",200,1,16,"bcd"));
……
rs.Close();
conn.Close();
如上例子中以“?”代表即将输入的内容。在具体的查询执行过程中,这个含有待输入内容的SQL语句会被应用程序提交给DBMS,由DBMS执行查询计划,应用程序随后以参数的方式传递这些输入值,DBMS把参数输入的值应用到查询计划中,并执行得到查询结果。即便攻击者改变参数的值再次执行语句,会得到不同的查询结果,参数输入的值的变化不能影响到查询计划。这就如同我们做的填空题:“查找密码是(_)并且用户名是(_)的用户。”无论谁填也无论括号内填什么,都不能改变语句本身的意思。(2)验证输入
SQL注入主要是开发人员对输入的参数等数据不进行过滤或验证造成的。那么可以通过限制表单或者查询字符串输入的长度来进行防范。若用户名的长度最长为12个字符,那么表单输入时可限制输入12个字符以上的内容,这样一定程度上限制了攻击者的攻击行为。
对用户输入的内容的合法性进行验证,确保输入的内容仅包含合法数据,验证除了在客户端进行之外再服务器端也可以再次进行验证,这样可以弥补客户端验证脆弱的安全性。在客户端,攻击者有可能会通过非法方式获取网页源代码,对合法性验证的脚本进行修改,然后将非法输入通过修改后的表单提交到服务器端。因此,若要保证非法数据无法注入,最好的办法就是客户端和服务器都执行验证。
(3)安全配置数据库服务器
对数据库服务器的安全配置格外重要,即便网站不小心被SQL注入所攻击,攻击者想获取服务器密码也没那么容易。
一般的网站给予用户连接DBMS的权限级别较高,这样比较危险,可以根据实际需要分配不同级别账号,给予的权限一定是其需要的最低权限就够了,从连接源头限制攻击者的进一步获取数据的权限。
当攻击者通过SQL注入获取了数据库连接文件的数据时,接下来有可能使用文件中的username和password来连接数据库服务器,所以数据库网络连接的安全必须要设置恰当。其中一种方法是对连接进行限制,仅保留本地指定的IP地址有权访问数据库服务器,对其他任何IP地址一律拒绝。或者将连接数据库服务器的端口由默认改为自定义,也可以从一定程度保证数据库服务器的安全。
4结束语
SQL注入攻击主要针对应用程序开发过程中的编程漏洞,这种攻击是可以绕过很多防火墙的,虽然DBMS版本一直不断地更新,加上脚本语言本身漏洞的减少,但只要此漏洞存在,总是潜伏着很多隐患。因此,研究SQL注入攻击的防范方法,在应用程序等开发的过程中对用户输入信息的详细过滤检查,重视DBMS的安全配置等,对于Web应用程序的安全有着非常重要的意义。
参考文献
[1]郑成兴.网络入侵防范的理论语实践[M].北京:机械工业出版社,2006,9:1-20.
[2]高洪涛.SQL注入攻击途径及策略分析[J].网络安全技术与应用,2011:14-16.
[3]石聪聪.一种新的SQL注入防护方法的研究与实现[J].计算机科学,2012(6):60-64.
[4]李晓龙.基于SQL注入攻击的三种防御技术[J].湖北文理学院学报,2013(5):18-21.
[5]赵阳.基于SQL注入的数据安全测评技术研究[D].沈阳工业大学,2012:33-35.
[6]徐寅昊.SQL注入及SQLServer的安全性研究[D].上海:华东师范大学,2009:44-45.
[7]王伟平.基于正则表达式的SQL注入过滤模块设计[J].计算机工程,2011,37(5):158-160.
相关期刊推荐:《数字化用户》
《数字化用户》创刊于1992年,经国家新闻出版总署批准,四川科学技术学会主管、四川电脑推广协会,电脑商情报社主办。国内刊号CN51-1567/TN国际刊号ISSN1009-0843邮发代号62-99。本刊一直以来以其学术性、专业性、权威性、实用性,承担着为政府机构、企事业单位、各大院校以及科研机构的数字化管理、研发、技术人员提供展示科研成果、进行学术交流的重要职责。
《数字化用户》办刊宗旨
本刊坚持科学发展观,响应我国数字化信息时代的方针、政策和发展战略;探讨数字化建设的规划、方案和成果;交流数字化技术和应用的实例和经验;推广数字新技术、科技新理念,推动数字技术发展。
《数字化用户》主要栏目
数字产业、信息工程、科技前沿、网络通信、数字化教学、电子商务、物联网、智能系统、理论探索、软件开发应用、数字化医疗、综合论坛、电子科技等。
《数字化用户》期刊数据库收录情况/影响因子
万方数据-数字化期刊群全文收录期刊、《中国核心期刊(遴选)数据库》收录期刊、中文科技期刊数据库全文收录期刊、龙源国际期刊网全文收录期刊、中国期刊网全文收录期刊。
月期刊平台服务过的文章录用时间为1-3个月,依据20年经验,经月期刊专家预审通过后的文章,投稿通过率100%以上!