SQL注入攻击与防御

2012-09-18 05:42:32吴金秀
湖南邮电职业技术学院学报 2012年4期
关键词:用户名语句应用程序

吴金秀

(黄冈职业技术学院,湖北黄冈 438000)

据CNNIC中国互联网络信息中心2009年7月16日发布的《第24次中国互联网络发展状况调查统计报告》中显示,我国共有网民数量3.38亿人,网站数量306.1万个,半年内有1.95亿网民在上网过程中遇到过病毒和木马的攻击,1.1亿网民遇到过账号或密码被盗的问题。

而据多种调查显示,目前SQL注入攻击是造成上述严重情况的根本原因之一,也是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患,这也给黑客带来很多可乘之机。

随着B/S模式被广泛的应用,基于B/S模式编写的应用程序越来越多。由于编写代码时没有对用户输入数据或者页面中所携带的信息(如Cookie)的合法性进行判断,使应用程序存在安全隐患。SQL注入攻击对页面的访问和普通的Web页面访问一样,通过正常的WWW端口访问,防火墙不会对SQL注入攻击发出警报。如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。SQL注入的手法相当灵活,它巧妙的构造SQL语句,从而获取想要的数据。如身份窃取、私密信息窃取、带宽资源占用等。它们潜入之后,还会扩散并不断更新自己,给应用程序和用户带来了严重的危害。

1 SQL注入的原理

1.1 SQL注入攻击实现原理

结构化查询语句(SQL) 是一种用来和数据库交互的脚本语言。SQL注入攻击主要是利用SQL语法将一些特殊输入作为参数传入WEB应用程序,对数据库执行危害性的操作。例如WEB应用程序Login.aspx中对登录的用户进行身份验证,要求用户输入合法的用户名和密码。实现通过查询users表中用户名(username)和密码(password)的结果确认用户的合法性,假设有一个用户名为“abc”、密码是“123”,编写代码时SQL语句为:select userID from users where username=‘abc’ and password=‘123’,通过程序的逻辑设计,如果users表中拥有这一个用户,则登录成功,否则登录失败,这是编程者想要看到的结果。但是如果用户进行如下两种方式输入:

用户名和密码分别输入“abc”和“123’or‘a’=a”

SQL语句就变成:select userID from users where username=’abc’ and password=’123’or‘a’=’a’,所以不管users数据表中有没有abc这个用户,上面这个条件恒成立。

用户名和密码分别输入“abc’or 1=1—”和“123”

SQL语句为:select userID from users where username=’abc’ or 1=1--and password=’123’,其中”1=1”是恒等,”--”是注释,因此这两种输入方式下,不管理用户输入的用户名和密码是否正确,最后都得到成功登录的结果。同理通过在输入参数中构建SQL语句还可以删除数据库中的表,查询、插入或更新数据库中的数据,这些非法操作危害是很大的。

1.2 SQL注入的步骤

SQL注入是在对数据库进行动态查询业务时才可能存在。如:http://localhost:3028/exesite/default.aspx?id=17,其中?id=17表示数据库查询变量,这种语句会在数据库中执行,因此可能会给数据库带来威胁。进行SQL注入的步骤:

1)寻找SQL注入点。利用注入漏洞,通过输入一些特殊语句,可以根据浏览器返回信息,判断数据库类型,从构建数据库查询语句找到注入点。

“预防腰椎管狭窄症,第一,要保持正确的坐姿,要坐直,腰不能弯着。第二,不能躺卧看电视或者玩手机,因为躺着的时候,你要么屈颈,要么屈曲胸椎和腰椎,否则的话你是看不到电视的,在这种情况下腰椎的稳定性特别不好,得腰椎管狭窄症的几率就更大一些。第三,我们要用正确的姿势搬运重物,要直腰、屈髋、屈膝来把重物搬起,而不是直腿弯腰,搬运重物时不正确的姿势会造成腰肌的扭伤或者劳损,也会增加腰椎管狭窄症的风险。第四,我们要积极锻炼腰背肌,主张做小燕飞或是游泳。其他的运动锻炼对身体也有好处,但是对腰背肌作用很小。”

2)猜解用户名和密码。数据库中存放的表名、字段名都是有规律可循的。通过构建特殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度以及内容。这个猜测过程可以通过网上大量注入工具快速实现,并借助破解网站轻易破译用户密码。

3)寻找WEB管理后台入口。通常WEB后台管理的界面不面向普通用户开放,攻击者利用扫描工具快速搜索到可能的登录地址,依次进行尝试,试出管理台的入口地址。成功登录后台管理后,进行破坏行为,如篡改网页、上传木马、修改、泄漏用户信息等,并进一步入侵数据库服务器。

2 SQL注入攻击的防御

2.1 防御“SQL注入”的思路

尽管由于攻击的泛滥,人们防护SQL注入的安全意识已大为提升,但仍然有众多的人缺乏系统、具体的防护概念。下面将简要介绍如何以一种综合的方法来正确防护SQL注入。如图1所示,理想的解决思路是在Web应用生命周期的各个阶段做相应的努力。

图1 基于Web生命周期的SQL注入防护思路

1) 开发阶段

在编码阶段需要对输入进行细致的验证,使用静态查询,如使用参数化声明。且遵循“最小权限准则”,即只赋予应用程序完成其功能的最基本权限。以下是关于最小权限的一些建议:一是不要使用root权限访问数据库,二是为数据表设定限制的可读/可写权限,三是慎用数据库存储过程。

2) 测试阶段

在测试阶段采用以下两种方式确保Web应用程序代码的安全性:第一,采用源代码审核方式,从编程者角度审视代码是否存在漏洞;第二,执行渗透测试,从攻击者角度检查代码的安全性。需要注意的是,尽管完成以上两步,仍不能确保100%的安全,但这两种方法对于确保应用程序质量是必须的。

在产品化阶段,Web应用程序已经正常上线,并对外提供服务。但还是会发现Web应用存在安全隐患,此时整改代码对各类组织来说已经不现实了,因为需要付出较大代价。这时,可以部署专用的Web应用防火墙(Web Application Firewall,简称WAF),以大幅提升Web应用的安全等级。

2.2 SQL注入攻击的防御措施

鉴于SQL注入攻击的方法与手段,在web编程和搭建web框架时做好防御SQL注入攻击是很有必要的,主要遵循几条非常基本的规则:一是对用户的输入进行校验,通过正则表达式或限制长度,对单引号或“--”进行转换。在构造动态SQL语句时,一是要使用类型安全 (type-safe)的参数加码机制;二是在应用程序部署前做安全审评,在每次做更新时,对所有的编码做审评;三是敏感数据信息在数据库里不以明文存放;四是锁定数据库的安全,给访问数据库的web应用所需的最低的权限,如果web应用不需要访问某些表,则设定它没有访问这些表的权限;五是利用防御工具,在开发的过程中先进行SQL注入检测。具体防御措施如下:

1) Web应用安全评估:结合应用的开发周期,通过安全扫描、人工检查、渗透测试、代码审计、架构分析等方法,全面的发现Web应用本身的脆弱性及系统架构导致的安全问题。对应用程序本身在评估过程中可以参考OWASP TOP TEN最新版本,重点检查表1所示内容。

表1 Web应用安全评估

2)Web应用安全加固:对应用代码及其中间件、数据库、操作系统进行加固,并改善其应用部署的合理性。从补丁、管理接口、帐号权限、文件权限、通讯加密、日志审核等方面对应用支持环境和应用模块间部署方式划分的安全性进行增强。

3) 对外部威胁的过滤:通过部署Web防火墙、IPS等设备,监控并过滤恶意的外部访问,并对恶意访问进行统计记录,作为安全工作决策及处置的依据。

图2 威胁过滤及记录分析

4)Web安全状态检测:通过常见挂马页面代码的特征,持续地检测被保护应用页面的当前状态,判断页面是否被攻击者加入恶意代码。同时通过检测Web访问日志及Web程序的存放目录,检测是否存在文件篡改及是否被加入Web Shell一类的网页后门。

5)事件应急响应:提前做好发生几率较大的安全事件的预案及演练工作,力争以最高效、最合理的方式申报并处置安全事件,并整理总结。

图3 事件应急响应流程

6)安全知识培训:让开发和运维人员了解并掌握相关知识,在系统的建设阶段和运维阶段同步考虑安全问题,在应用发布前最大程度的减少脆弱点。

3 结束语

SQL注入的危害是很大的,为了提高开发的应用程序的安全性,从应用程序开发的全过程中加强安全评审。建立安全防范意识,让应用程序具有较高的实用价值,也让黑客或不良用户没有可趁之机。

[1]陈轮,刘蕾,等.ASP.NET 3.5网络数据库开发实例自学手册[M].北京:电子工业出版社,2008.

[2]eng308.SQL注入攻击[EB/OL].http://www.cnblogs.com/eng308/archive/2010/02/03/1662908.html,2010-02-03.

[3]Arade.什么是SQL注入[EB/OL].http://netsecurity.51cto.com/art/200804/69852.htm,2008-04-15.

[4]SQL注入攻击三部曲之入门篇[EB/OL].http://netsecurity.51cto.com/art/200804/69852.htm.

猜你喜欢
用户名语句应用程序
《护士进修杂志》投稿程序
重点:语句衔接
删除Win10中自带的应用程序
电脑报(2019年12期)2019-09-10 05:08:20
精彩语句
机智的快递员
故事会(2017年17期)2017-09-04 17:36:42
如何搞定语句衔接题
语文知识(2014年4期)2014-02-28 21:59:52
关闭应用程序更新提醒
电脑迷(2012年15期)2012-04-29 17:09:47
三星电子将开设应用程序下载商店
作文语句实录
微软软件商店开始接受应用程序