《SQL注入式攻击与防范(共8页).doc》由会员分享,可在线阅读,更多相关《SQL注入式攻击与防范(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 优集学院学期论文3论文题目:基于ASP.NET的SQL注入式攻击与防范 专心-专注-专业基于ASP.NET的SQL注入式攻击与防范摘要:SQL注入是黑客攻击web站点的一种常见手段。本文简要介绍了基于ASP.NET的SQL 注入攻击的类型,注入攻击的原理以及SQL 注入攻击的实现过程,并论述了数据库中的一些攻击方法和防范措施,利用实例进行剖析。利用SQL注入攻击的原理、公共网的SQL注入漏洞分析、典型的攻击过程剖析以及防范的策略来论述数据库的安全防范。关键词:数据库;SQL 注入;客户端程序;防范检测技术;安全防御ASP.NET-based SQL injectio
2、n attack and preventionAbstract:SQL injection is a common means of hacking web site. This article introduces the ASP.NET-based type of injection attack, the principle of injection attack and the implementation process of SQL injection attack. At the same time, discussing some methods of attack and p
3、reventive measures and using instance to analyze. Expounding the security and protection of database by using the principle of SQL injection attack, analysis of public network of injection, typical analysis of injection process and the precautionary strategy. Key words: database; SQL injection; clie
4、nt program; technology of prevent detection; security defense前言在计算机技术高速发展的今天,越来越让人们头疼的是面临越来越“变态”和复杂的威胁网站技术,他们利用Internet执行各种恶意活动。近年来,SQL注入攻击的数量一直在增长,使得互联网的安全问题越来越严重。许多公共网站,包括政府,教育部门以及一些企业都遭受到了SQL注入的攻击;若干包含恶意 代码被加到网站的数据库中,当用户访问这些可信站点时,浏览器会被指向包含恶意代码的网站。如果用户计算机系统存在可被利用的安全漏洞,同时并未安装有效的防病毒系统,攻击者可在用户电脑上运行更多
5、的恶意代码,从而导致用户电脑被控制。1 注入攻击类型从目前来看,注入式攻击技术中有 CRLF 注入攻击技术和SQL 注入攻击技术。CRLF 的含义是carriage return/line feed。意思就是“回车”。这是两个ASCII字符,CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作,在每一行的末端,CR命令让打印头回到左边。LF命令让纸前进一行。CRLF注入攻击并没有像其它类型的攻击那样著名1。而 SQL 注入攻击由于其广泛性、易学性、难追踪性成为了注入攻击方式的主流。下面主要介绍下SQL注入攻击。2 SQL注入攻击原理和过程2.1 SQL注
6、入攻击原理SQL 注入(SQL Injection)是指攻击者能够通过向查询语句中插入一系列的SQL语句来操作数据,写入到应用程序中去。随着B/S模式应用开发的发展,使用这种模式的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果获得某些他想得知的数据2。这就是所谓的SQL Injection,即SQL注入。目前没有对 SQL注入技术的标准定义,微软中国技术中心从两个方面进行了描述:(1) 脚本注入式的攻击;(2) 恶意
7、用户输入用来影响被执行的SQL 脚本。SQL注入攻击最初主要是利用程序开发人员编写代码的漏洞来进行攻击,大致来说可以分为:授权旁路型,SELECT型,其它型。2.2 SQL注入攻击过程2.2.1 寻找并验证SQL注入位置寻找SQL注入点的经典方法是在有参数传入的地方添加如and1=1 和 等一些特殊字符,通过浏览器所返回的错误信息来判断是否存在SQL 注入。一般来说SQL 注入存在于形如:HTTP:/xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中。有时一个动态网页中可能有一个参数,有时可能有N个参数。有时是整型参数,有时是字符串型参数,不能一概而论。总之,只要是
8、带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL 注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在 SQL 注入的可能性就非常大。2.2.2 获取信息获取信息是SQL注入中一个关键的部分,SQL 注入首先需要判断存在注入点的数据库是否支持多句查询、子查询、数据库用户账号、数据库用户权限。如果用户权限为sa且数据库中存在xp_cmdshell存储过程,则可以直接转入下一步操作。一般来说,ACCESS 与SQL SERVER是最常用的数据库服务器。尽管它们都支持T-SQL标准,但还有不同之处且不同的数据库有不同的攻击方法,必须要区别对待。2.2.3 发现Web虚拟目录只
9、有找到WEB虚拟目录,才能确定放置ASP木马的位置,进而得到USER 权限。通常来说有两种方法比较有效,一是根据经验猜解,一般来说WEB虚拟目录是c:inetpubwwwroot; D:inetpubwwwroot; E:inetpubwwwroo等,而可执行虚拟目录是c:inetpubscripts; D:inetpubscripts; E:inetpubscripts等;二是遍历系统的目录结构,分析结果并发现WEB 虚拟目录3。2.2.4 上传ASP木马所谓ASP木马,就是一段有特殊功能的ASP代码并放入WEB虚拟目录的 Scripts下。远程客户通过IE就可执行它,进而得到系统的USER
10、权限,实现对系统的初步控制。2.2.5 得到管理员权限 直接获得管理员权限,实现对系统的控制。3 SQL注入式攻击的防范3.1 替换或删除敏感字符和字符串例如可以把所有单独出现的单引号改成两个单引号,或是删除用户输入内容中的所有连字符。但这是一种不完全的解决措施,举个例子来说明它的弱点,当客户端的输入为“ccmdmcmdd”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是“cmd”。3.2 配置最小化执行权限服务器管理员应在IIS中为每个网站设置执行权限,千万别给静态网站以“脚本和可执行”权限。这样做是为了防止黑客上传ASP木马,执行权限设为“无”,即使上传ASP木马也运行不了。一般
11、情况下,SQL注入漏洞仅是涉及一个网站安全的事,如果通过这个漏洞上传了ASP木马并成功运行,那整个服务器就会失陷。同样地,限制来执行查询的数据库帐户的权限,用不同的用户帐户执行查询、插入、更新、删除操作。这样的话如果有敌意的代码对数据库实施此攻击,由于缺乏权限而将破坏降到最低限度。3.3 在构造SQL命令之前,利用程序过滤其内容这是一种行之有效的方法,例如可以编写如下模版执行过滤:/检查提交表单中是否存在 SQL注入可能关键字/ 当前 HttpRequest 对象/ 是否存在 SQL注入关键字,true存在,false不存在public bool CheckRequestForm().if (
12、request.Form.Count 0)./获取提交的表单项不为0逐个比较参数for (int i = 0; i request.Form.Count; i+)./检查参数值是否合法if (CheckKeyWord(request.Formi)./存在SQL关键字return true;return false;3.4 使用命令参数集模式参数(Parameters)集合提供类型检测和长度检测,如果你使用参数集合,输入内容将被当作文本值来对待,数据库不会执行包含在其中的代码。使用参数集方式的一个额外好处是,你可以严格限定输入的类型和长度,如果输入值超出范围将会触发异常4。下面的代码片段演示了在
13、调用存储过程时使用参数集的例子:SqlDataAdapter myCommand=new SqlDataAdapter(AuthorLogin,myConnection);myCommand.SelectCommand.CommandType=CommandType.StoredProcedure;SqlParameter parm=myCommand.SelectCommand.Parameters.Add(LoginId,SqlDbTyp e.VarChar,11);parm.Value=Login.Text;如果你不能使用存储过程,你仍然可以使用参数集,代码为:SqlDataAdapte
14、r myCommand=new SqlDataAdapter(SELECT au_lname,au_fname FROM Authors WHERE au_id=au_id,myConnection);SQLParameter parm=myCommand.SelectCommand.Parameters.Add(au_id,SqlDbType.VarChar,11);Parm.Value=Login.Text;3.5 执行数据检查在客户端和服务器端检测都执行数据检查,确信输入的内容只包含合法的数据。在客户端,攻击者完全有可能获得网页的源代码修改验证合法性的脚本(或者直接删除脚本),然后将非法
15、内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过 CustomValidator自己创建。3.6 数据敏感信息非常规加密通过在程序中对用户口令等敏感信息加密,比如采用MD5函数进行加密,即密文=MD5(明文)。MD5是没有反向算法,不能解密的,攻击者即使知道经加密后存在数据库里的像乱码一样的密码,也没办法知道原始密码。不过,可以用UPDATE方法
16、用其他人的密码代替你的密码,但这个操作有点麻烦,大多数都会怕麻烦而放弃,这将挡住一部分攻击者。对于非常规加密,在原来的基础上增加一些非常规的方式,即在MD5加密的基础上附带一些值,如密文=MD5(MD5(明文)+)。3.7 防止错误的详细信息被返回到客户端这个方法的实质是攻击已经发生,只是在服务端处理完毕之后进行补救,阻止攻击者知道攻击的结果。我们可以使用元素来配置客户端,一般的错误信息应该被程序错误检测机制返回到客户端5。请确认已经更改web.config中的mode属性为remoteOnly,下面是示例。在安装一个 ASP.NET的程序之后,可以按照如下设定指定客户端的错误信息页面:4 结
17、束语SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,所有的web开发人员应该引起重视。不管是在什么平台,技术,数据层的开发者,都需要对它进行理解和防止。本文针对目前面临的网络安全问题进行了研究,提出了SQL注入攻击的原理和产生原因,并简单介绍了常用的攻击方式。我相信,今后的SQL注入攻击将从现有的人工寻找漏洞、手动输入数据、只针对单个网站的方式向自动化、智能化的方式转变。因此在架设 Web 服务器时要全盘考虑主机和系统的安全性,设置好服务器和数据库的安全选项,这样才能做到防患于未然,最大程度地保证 Web 服务器。参考文献:1 黄晓春, 卢玉蓉, 赵剑峰. ASP.NET安
18、全问题及解决策略J. 电脑知识与技术. 2006:48-49.2 Dimitris Mitropoulos, Diomidis Spinellis. SDriver: Location-specic signatures prevent SQLinjection attacksJ. ScienceDirect. 2009:121-129. 3 曾 芳. 配置抵御SQL注入式攻击的服务器J. 电脑知识与技术. 2008,4(9):2995-2886.4 Abdul Bashah Mat Alia, AlaYaseen Ibrahim Shakhatrehb, Mohd Syazwan Abdullahc, Jasem Alostadd. SQL-injection vulnerability scanning tool for automatic creation of SQL-injection attacksJ. ScienceDirect. 2011:453-458.5 徐 陋, 姚国祥. SQL注入攻击全面预防办法及其应用J. 微计算机信息. 2006,26(3):10-12.