基于ASP.NET网站防范SQL注入的网络安全技术分析

2012-09-01 00:17陈志辉吴敏敏
赤峰学院学报·自然科学版 2012年13期
关键词:普通用户用户名页面

陈志辉,吴敏敏

(莆田学院 电子信息工程系,福建 莆田 351100)

基于ASP.NET网站防范SQL注入的网络安全技术分析

陈志辉,吴敏敏

(莆田学院 电子信息工程系,福建 莆田 351100)

W eb技术在各个领域得到日益广泛的应用,给人们的生活带来了便利,也带来了前所未有的巨大安全风险.目前对Web业务系统,威胁最严重的两种攻击方式是SQL注入攻击(SQL Injection)和跨站脚本攻击(XSS).文中通过具体案例分析了基于ASP.NET网站的SQL注入攻击主要手段和实现过程,总结了一般的SQL注入攻击的防范措施.

ASP.NET;SQL注入;防范措施

1 引言

随着Internet的发展,Web应用在电子政务、电子商务等领域得到广泛的应用,这给人们的生活工作带来极大的便利,但同时也带来了极大的安全隐患.根据世界知名的Web安全与数据库安全研究组织OWASP提供的报告,目前对Web业务系统,威胁最严重的两种攻击方式是SQL注入攻击(SQL Injection)和跨站脚本攻击(XSS)[1].本文主要对基于ASP.NET网站的SQL注入漏洞和防御措施进行分析.

2 SQL注入概念

所谓SQL注入攻击,就是攻击者把非法的SQL命令插入到表单的输入域或者页面请求的查询字符串,欺骗服务器执行这些恶意的代码.Web程序员如果在编程时候对于Web系统的安全性考虑不够,没有对用户输入的信息进行验证和过滤,就会产生SQL注入漏洞[2].如果Web系统存在漏洞,SQL注入攻击者在攻击成功后可能获得站点的最高管理权,随意修改站点的代码、数据等,还可以查看数据库中的一些重要数据信息,危害极大[3,4].

3 基于ASP.NET网站SQL注入攻击实例分析

与ASP.NET搭配最密切的数据库是SQL Server.SQL Server是公认运行在Windows平台上最佳的数据库,它具有对称的多处理器结构、抢占式多任务管理、完善的容错与恢复能力[5,6],它也是SQL注入攻击的主要源头.

Web系统数据提交方式有两种,分别是Get和Post.Get提交数据是通过网页的URL地址,需要把提交数据在URL地址中显示出来,用户可以看到也可以随意输入修改.Post传输数据时,不需要在URL中显示出来.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节.不同提交方式SQL注入攻击方式不同,以下我就对基于ASP.NET+SQL Server网站的多种SQL注入攻击实例进行分析.

3.1 利用后台登录窗口的SQL注入后台登录窗口的代码:

这里conn是数据库连接对象,name和password是用户在登录窗口输入的用户名和密码,假设实际管理员用户名为administrator,密码为123456,那么Web应用发送给数据库服务器的SQL语句为:

select*from administrators where name='administrator'and password='123456'

在数据库中找到一条对应的记录,登录成功.

但是如果用户输入的用户名和密码没有经过任何处理直接发送给数据库服务器执行,那么如果用户输入的用户名为wmm'OR 1=1--,密码为123,那么Web应用发送给数据库服务器的SQL语句为:

我们知道,在SQL Server中注释符—表示注释掉注释符后面本行内容,1=1恒为真,OR运算中两个操作数只要一个为真,结果就为真,因此上面的SQL语句where后面的条件恒为真,返回administrators表的所有记录,dr.read()返回的结果就为真,我们就成功地登录了.还有其它方法,原理都是一样的,只要让dr.read()返回的结果就为真就行了.

3.2 利用数据更新的SQL注入

设后台数据库中有一张表users,表的结构如表1:

表1 用户信息表

name和password是用户名和密码,level是用户等级,1表示管理员,2表示普通用户.普通用户更新密码代码:

这里conn是数据库连接对象,password是用户输入的新密码,但是如果用户输入的新密码没有经过任何处理直接发送给数据库服务器执行,那么假设普通用户wmm输入的新密码为123',level='1,那么Web应用发送给数据库服务器的SQL语句为:

那普通用户wmm就变成了管理员.

3.3 利用插入数据的SQL注入

设后台数据库中有一张表users,表的结构如表n.

普通用户注册代码:

这里conn是数据库连接对象,name和password是普通用户在注册窗口输入的用户名和密码,默认插入的用户级别为2(既普通用户).那么假设普通用户在注册时候,输入的用户名为wmm,密码为123456’,’1’)--,那么Web应用发送给数据库服务器的SQL语句为:

我们知道,在SQL Server中注释符—表示注释掉注释符后面本行内容,这样在普通用户注册页面就注册了一个用户名为wmm,密码为123456,级别为1(既管理员)的用户.

3.4 利用Get漏洞的SQL注入

(1)在地址栏里面输入http://localhost/site/users.aspx?name=wmm’,得到结果如图1所示.

图1 Get注入漏洞

(2)在地址栏里面输入http://localhost/site/ users.aspx?name=wmm’%20and%20’1’=’1页面运行正常,运行结果和在地址栏里面输入http://localhost/site/users.aspx?name=wmm相同.

(3)在地址栏里面输入http://localhost/site/ users.aspx?name=wmm’%20and%20’1’=’2页面运行异常,其中%20是空格的URL编码.

如果以上三步全面满足,users.aspx中一定存在SQL注入漏洞,那么攻击者就可以通过这个页面实施SQL注入攻击,比如猜测后台数据库的表名、字段名等重要信息的攻击.

(1)猜测表名:在地址栏中输入http://localhost/site/users.aspx?name=wmm’%20and%20(select%20count(*)%20from%20users)<>0%20and% 20name=’wmm,如果存在users表格,页面返回正常.

(2)猜测字段名:在地址栏中输入http://localhost/site/users.aspx?name=wmm%20and%20(select%20count(name)%20from%20users)<>0% 20and%20name=’wmm,如果users表格中存在name字段,页面返回正常.

4 基于ASP.NET网站SQL注入攻击的防范措施

4.1 SQL注入攻击客户端安全措施

SQL注入大多都是从客户端渗透进来的.客户端提交的SQL注入如果没有进过验证和过滤,直接当作可靠数据提交给服务器,那就会发生SQL注入攻击,所以客户端提交的数据在提交给服务器处理前,要进行验证和过滤:

(1)使用Server.HtmlEncode()函数对客户端提交的数据进行编码;(2)使用MD5对客户端提交的数据进行加密;(3)定义正则表达式对客户端提交的数据进行验证,检验客户端输入的数据是否符合要求;

(4)使用参数化的SQL或者直接使用存储过程对数据库进行数据查询存取.

4.2 基于ASP.NET网站SQL注入攻击防范实例分析

SQL注入是通过向服务器提交特殊的代码,以达到攻击者目的,要防范SQL注入攻击首先要对客户端提交的数据进行验证和过滤.

4.2.1 用户注册页面的防范措施

用户注册页面的信息是通过表单以Post方式提交,注册页面提交的数据一般包括用户名、密码、性别、出生日期、备注等.

限制用户名由下划线、数字、字母组成,长度在4到15之间.这样攻击者就不能输入单引号、空格等特殊字符,输入的字符的长度也有限,也就很难攻击.

这里name是用户输入的用户名,RegexOptions.IgnoreCase是忽略大小写.

用户输入的密码都要加密后提交给数据库,可以使用MD5对密码进行加密,但是该加密方法号称不可逆,不过已经被破解了,网上很容易搜到破解工具,我们最好做一些更改,网上的工具就无法破解了.

性别只允许是男或者女.

出生日期限制提交日期型数据给数据库.

备注里面的内容用Server.HtmlEncode()函数进行编码后提交给数据库.

4.2.2 登录页面的防范措施

在登录窗口用户输入的用户名和密码必须能够在数据库中找到相应的记录才能够登录成功.如上面提到"select*from administrators where name='"+name+"'and password='"+password +"'",但是这样攻击者很容易绕过登录验证.

为了安全起见应限制用户在登录窗口输入的用户名由下划线、数字、字母组成,长度在4到15之间.也可以把用户名和密码分开验证.先验证用户名"select*from administrators where name='"+ name+"'",如果返回的数据集非空,再验证密码password==rs[“password”],password为用户输入的密码,rs[“password”]为数据库内的密码

4.2.3 URL传值的SQL注入防范措施

如上面提到http://localhost/site/users.aspx? name=wmm,name对应数据库中name(用户名)字段,限制由下划线、数字、字母组成,长度在4到15之间,禁止用户输入SQL关键字,如Select、Insert、Update等.

5 总结

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报.程序员在编写代码时,没有对用户输入的信息进行验证和过滤,使应用程序存在安全隐患.SQL注入攻击成功后,对服务器乃至系统都是巨大的威胁.因此,研究SQL注入攻击的防范方法、加强代码编写时对用户输入信息的过滤检查,对于开发安全的Web应用程序有着重要意义.

〔1〕景炜.电子政务系统网络安全的研究与应用[D].成都:电子科技大学,2006.5.

〔2〕胡昌振.网络入侵检测原理与技术[M].北京:北京理工大学出版社,2006.156-182.

〔3〕邓吉,曹轶,罗诗尧.黑客攻防实战入门(第2版) [M].北京:电子工业出版社,2007.76—91.

〔4〕M ike Shema.Web安全手册[M].北京:清华大学出版社,2005.62—68.

〔5〕余杰,李莎莎.SOL Server项目开发实践[M].北京:中国铁道出版社,2006.112-116.

〔6〕余晨,李文炬.SOL Server 2000培训教程[M].北京:清华大学出版社,2002.32-35.

〔7〕闫洪亮,李波,黎杰.ASP.NET程序设计[M].上海:上海交通大学出版社,2008.

TP309;TP393

A

1673-260X(2012)07-0017-03

莆田学院教改项目(JG200818)

猜你喜欢
普通用户用户名页面
《护士进修杂志》投稿程序
刷新生活的页面
A quantitative analysis method for contact force of mechanism with a clearance joint based on entropy weight and its application in a six-bar mechanism
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
即使是普通用户也需要备一张家庭影院入门攻略:影音调校工具篇1
机智的快递员
Numerical Analysis of Refueling Drogue Oscillation During Refueling Docking
Web安全问答(3)
网站结构在SEO中的研究与应用