基于SQL注入Web数据安全防范和优化_第1页
基于SQL注入Web数据安全防范和优化_第2页
基于SQL注入Web数据安全防范和优化_第3页
基于SQL注入Web数据安全防范和优化_第4页
基于SQL注入Web数据安全防范和优化_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于sql注入web数据安全防范和优化摘要:sql注入利用数据库系统的安全漏洞,以及程 序中的验证漏洞,构造合适的sql语句,并通过正常的url 访问进行代码提交,获取数据库中的相关信息,从而实现网 站攻击的目的。加强用户提交数据的合法性验证,是防止sql 注入的基本方法。而改善asp中的request函数,使其具有 对一切用户数据进行合法验证的能力,是sql注入威胁下, web数据安全防范方法的最佳优化。关键词:sql注入;数据安全;防范;优化中图分类号:tp309. 5文献标识码:a文章编号: 1009-3044 (2014) 10-2184-04abstract: exploiting

2、the security vulnerabilities of database system and validation vulnerabilities of the computer programs, sql injection builds proper sql statements, submit code by normal url access and get relevant infonnation from the database in order to achieve the goal of website attacks it is the basic approac

3、h of preventing sql injection to strengthen the legality verification while a user submits dato. and under the sql injection threat , it is the best optimization of web data safety precautions to improve the request function of asp so as to make it capable to verify the legality of all user data.key

4、 words :sql-injection ; data security ;precaution; optimization在当前各类网站建设或者基于web平台的软件系统建设(以下统称网站)中,由于从事开发的人员的水平与经验, 参差不齐,这就直接导致许多网站,都存在着一定程度上的 安全隐患,给黑客的攻击留有可趁之机,严重威胁着网站的 正常运行。尤其是如果釆用sql注入进行攻击的话,由于该 方法灵活多变,对网站的安全性具有更高的考验。并且,这 种注入是通过www端口实现的,跟对网站的web页面的正常 访问是一样的,因此,这种注入还能绕过许多防火墙的监控, 具有很强的隐蔽性。各种原因使然,国内目

5、前绝大部分的网站,都采用asp 技术,以access或者sql-server为数据库。因此,笔者以 此为技术平台,分析sql注入的安全威胁、防范对策以及深 入的优化策略。1 sql注入的基本原理所谓sql注入,是指利用网站程序对用户输入数据的合 法性验证中存在的漏洞,构造合适的sql语句,并通过正常 的url访问提交此代码,从而获取并借肋网站数据库中的相 关信息,达到攻击的目的。这种注入随着攻击者的sql语句 构造能力愈强,变化也愈巧妙,对网站的开发者在数据安全 防范方面的意识与能力,挑战性也就愈强。sql注入通常有以下四个特征:1)利用用户输入数据的合法性验证漏洞进行突破。这 与许多黑客攻击

6、直接利用服务器的安全漏洞进行网站攻击 有本质的不同。2)应变性强。能够根据不同的数据库结构,构造出不 同的sql语句,巧妙灵活;3)相关的攻击代码,通过web端口,伴随着正常的页 面访问进行注入,不直接与防火墙或其它安全防范软件进行 “硬接触” o4)access数据库与sql-server数据库一个共同的特点: 如果参与运算的数据的数据类型不正确,就先尝试进行数据 类型转换,如果转换失败,会返回一个错误报告。sql注入 正是利用这个特点,故意提交一些错误类型的数据,“诱 惑”数据库自觉犯错并报错,从而泄露了重要信息。这一点, 也是sql注入最重要的特征。我们举例实际分析一下sql注入的基本原

7、理。我们设定 网站的测试服务器地址为:http: /127. 0. 0. 1,测试的url 为:http: /127. 0. 0. l/art_detail. asp? id=8o通过浏览器的地址栏输入以上url,并在最后加上一个 单引号,使其成为 http: /127. 0. 0. l/art_detail. asp?id二8,然后再次访问。这时,如果服务器在浏览器中返回 以下信息:microsoft jet database engine 错误 '80040el4' 字符串的语法错误 在查询表达式'id=8''中。/art_detail. asp,

8、行 9那么,根据这个返回的错误信息就可以作出以下判断:1)该网站存在sql注入的安全漏洞,这是最基本的判 断;2)该网站的数据库是ms-access,并且连接数据库的引 擎是jet;3)该页面使用的数据表中,有一个字段的名称是id;由此可见,如果网站程序对用户的输入信息没有严格的 合法性验证的话,仅在一个url后附加一个简单的符号,就 可能试探出许多服务器及数据库中的信息,获取需要的资 料。这就是sql注入的基本原理。2 access数据库的sql注入与防范对策access数据库尽管存在着各种各样的安全漏洞,但是由 于其方便、灵活的性能以及目前国内网站的实际需要,许多 网站,依然是采用acce

9、ss作为数据库。而针对access数据 库,利用sql注入进行网站攻击的方法,主要有单引号探测 法与1=1, 1=2探测法两种。这两种方法基本都是利用了数 据库对错误数据类型的数据进行运算时,有自动转换数据类型的特点,因此,在数据安全防范对策上,也主要是从阻止 这种自动转换出发。2.1单引号探测法无论是哪一种sql注入方法,寻找注入点都是第一点。 因此,在防范策略上也主要是从注入点着手,把存在的注入 点都消除了,也就意味着堵住了 sql注入的唯一途径。在众多的注入点探测法中,单引号探测法是比较基本、 简单的一种方法。其操作方法就是在带有访问参数的网址后 面,附加一个单引号提交给服务器,再从服务

10、器返回的错误 信息中,分析、获取需要的资料,然后决定如何构造进一步 的注入语句。它主要利用的漏洞就是程序员在验证用户输入 数据时,没有过滤掉特殊字符。因为在带有访问参数的网址 中,如 http: /127. 0. 0. l/art_detail. asp? id=8,当程序 收到这串url时,它必定向数据库进行一个id=8的查询操 作,比如有可能是:dim v_idv_id=request. querystring "id"sqlst" select * from #table_name where id二"&v_id在大多数情况下,id字段的数

11、据类型是“数字型”或“数值型”。如果攻击者在后面附加一个单引号,变成id=8后面的“8 ”就不再是“数字”或“数值”,而是“字符串” 了。在这种情况下,数据库就会尝试把这个“字 符串型”转换成“数值型”,当然,这样的的转换一定会失 败,相关的查询也就没办法完成。于是,服务器便会向客户 端的浏览器返回以下信息:microsoft jet database engine 错误 '80040el4' 字符串的语法错误 在查询表达式'id=8''中。/art_detail. asp, 行 9这就是上文所述的情况了。当然,对这种情况,我们的防范措施也是比较简单有且

12、 有效的。第一种方法是对用户端提交来的数据,在程序上先进行 数据类型转换,避免直接交给数据库进行转换。如:v_id=request. querystring "id"改为:v_id=cint (:request. querystring “id")这样,如果提交上来的id值,不是“数值型”的话, 就在执行这个语句时,直接报错,而不再把数据提交给数据 库,从而避免由于数据库处理时报错而泄露相关信息。第二种方法是采用过滤法,对用户提交上来的数据中, 可能存在的特殊字符,先过滤掉,再提交给数据库进行下一 步的操作。例如定义一个过滤函数如下:然后,对用户提交上来的数据,先

13、执行一下过滤操作:v_id= ( replacebadword ( request. querystring (” id” )这样,就可以使用户数据中存在的特殊字符,在进行数 据库查询之前,全部过滤掉。强制性地将不合法的数据类型, 转换为合法类型。2.2 1=1与1=2探测法1=1与1=2探测法是access平台中另一种比较常见的注 入点试探法。尽管在sql-server数据库平台中,这种方法 也依然适用,但由于在sql-server平台中,有另一种更高 效的探测法,因此,这种方法,主要针对access平台使用。该法的试探语句如下:http: /127. 0. 0. l/art_deta订.a

14、sp? id=8; and 1=1 http: /127. 0. 0. l/art_detail. asp? id=8; and 1-2 提交访问以后,无论是添加了 1=1还是1=2,只要浏览 器中返回的结果跟正常url是一样的,或者虽然不一样,但 并没有返回一个由程序员自定义的错误信息,那么,就可以 判定这个网站是存在安全漏洞的,可以通过构造sql语句, 进行注入。这是利用了运算符的运算优先级不同而构造的sql注入 语句。因为1=1的结果是true,而1=2的结果是false。再 运行下一级运算时,就是id=8 and true, id=8 and false。最后,这两个url就变成了:h

15、ttp: /127. 0. 0. 1/art_detail. asp? id二truehttp :/127. 0. 0. 1/art_detail. asp ? id=false至此,我们已经可以看到,这种探测法实际上还是利用了数 据库在操作时,如果参与操作的数据类型错误,就自动转换 类据类型,如果转换出错,就返回报错信息的原理。因此, 在防范对策上,我们依然是在信息提交到数据库之前,先由 程序进行数据类型的强制转换,即使转换出错,也只向客户 端返回程序错误报告,而不会返回数据库错误报告。数据库 的相关信息资料,也就不会随着错误报告泄露。3 ms sql-server数据库的sql注入威胁与防

16、范对于access平台适用的注入点探测法,基本也适用于 sql-servero但是,由于sql-server数据库管理系统具有 更严谨、更复杂的系统性能,因此,也给网站攻击者留下有 别于access的注入漏洞。特别是在服务器的iis提示没有 关闭的情况下,sql-server中的一些系统变量中的信息,更 是网站数据安全的最大隐患。3. 1 user>0探测法该探测法就是利用了 sql-server中的一个系统变量 user中的信息,通过构造一个错误的sql语句,“诱惑"数 据库系统不自觉地泄露重要数据。user在ms sql-server数据库系统中,是一个重要的系 统变量,类

17、型是可变长度unicode (nvarchar),保存的是 当前连接数据库的用户名。当然,通常情况下,攻击者是不 知道这个用户名的。但是在user>0探测法,却是比较容易 破解的。只要把正常访问url改为:http : /127. 0. 0. l/art_detail. asp? id=8; and user>0这个url分号之前的内容,是正确的。但是当服务器遇 到user>0这段语句,而数据库又恰好是sql-server时,这 就相当于用一个nvarchar类型的数据与一个int类型的数 据,进行比较运算。系统就会尝试把user中的数值转换成 irit型,由于绝大多数情况下

18、,user中保存的数据都不会是 纯数字,因此,这种转换是失败的。于是,sql-server就会 把错误报告返回到客户端:将nvarchar值"lsx"转换数 据类型为int时发生语法错误!“lsx”就是系统变量user的值了,也就是当前数据库 的用户名。如果返回信息中,这个值是“dbo”的话,那安 全隐患就更大。因为这说明该网站的数据库是用sa这个用 户登陆连接的。而sa的是一个几乎与administrator具有 同样权限的用户。解决这个安全隐患的方法有两种。一是在构建网站的服 务器时,把iis提示关闭,这样即使是产生了数据库层面的 错误,也不会向客户端返回相关的报告。方

19、法二还是回到数 据的合法性验证上,构造合适验证函数,对提交上来的相关信息,进行验证或转换,避免没有任何的检查就直接向数据 库提交。3.2系统表探测法如果通过3.1中的方法,成功探测到数据库是用“sa” 用户登陆的话,那么,再利用系统表的探测法,依托 sql-server与操作系统之间的各种联系依赖,就几乎可以全 面突破网站的数据安全防线。在sql-server系统中,有一张名为sysobjects的系统 表,数据库中的表名、视图、约束及其它对象都存储在该表 中。并且在web环境下,这张表是具有可读权限的。那么,经过以下注入步骤,攻击者就可以将网站的数据 全部获取。1) http: /127.

20、0. 0. 1/art_detai 1. asp? id=7; exec master. xp_cmdshell “net user new_user new_pw /add"在sql-server系统中,分号的作用是划分语句。因此, 系统会将从数据库中查询出id=7的记录。然后,通过存储 过程xp_cmdshell调用系统命令net,给操作系统加一个名 称为new_user,密码为new_pw的系统用户。2) http: /127. 0. 0. l/art_detail. asp? id二7; exec masterxpcmdshell “net localgroup newuse

21、r administrators /addv这段代码一旦注入成功,就意味着刚才新添加的 new_user用户被攻击者添加到了数据库的管理员组,即具备 了管理数据库的一切权限。3) http: /127. 0. 0. l/art_detail.asp? id=l ; anddb_name () >0这里又一次利用了系统变量db_name (),这个变量中保存的是网站连接的数据库名称。因为这个名称是字符串型 的,而代码中的>0是一种比较运算,于是,系统就会被“诱 惑”将系统变量中的值先转成整型,这种转换必定会失败, 并将错误的信息返回给客户端。而当中所保存的数据库名,就随着这些信息一起

22、显示在浏览器中。数据库的名称都已经暴露了,如果注入者再探出数据库的路径的话,网站数据库就是毫无安全可言了。即将没有办 法探出数据库的路径,依然可以通过以下步骤,不断地构造 错误的sql代码,诱惑系统自行暴露相关的数据。1) http: /127. 0. 0. 1/art_detai 1. asp? id=l ; and(select top 1 name from sysobjects where xtype=, u, and status>0) >0xtype二'it and status。,表示用户建立的表名。用(四)中的语句,把sysobjects系统表中保存的第一张

23、数 据表名与0进行相比较,诱惑数据库系统出错、报错,返回 正确的数据表名。当然,同样的方法,其他数据表名也都不 难试探出来,只要把top 1把为2, 3即可。2) http: /127. 0. 0. l/art_deta 订.asp? id=l ; and(selec t top 1 col_nanie (ob jec t_ id ('t_ name,),1) fromsysobjects) >0知道了数据表的名称,就可以用上面的代码探得该表中的字段名。object_id (4 t_name)返 回该表名对应的内部id。col_name (t_name id, 1)即返回 t_n

24、ame表中第一个字段的名称,把1改为2,就是第二个字 段名,依此类推。至此,我们可见,如果防范措施不当,系统表有时简直就是数据安全最大的威胁,只要稍作“诱惑”,就会把网站 的数据全盘托出。4防止sql注入的防范优化无论是access还是sql-server,也无论是哪一种sql 注入点探测法,其实都是利用了用户提交的数据在验证中不 严谨的漏洞。但是,简单地采用前面所提及的特殊字符替换、 验证方法,也并非绝对安全,因为注入者还可以通过一些字 符转换函数,将特殊字符函数化以后,混在url中提交,例 如在ascii编码中,35是#对应的数值,那么用chr (35) 函数,替代#号,就绕过了程序中的特

25、殊字符验证。因此,还必须有更高的安全防范优化方法。具体的优化 方法可以有以下两种:1)重要的数据,采用加密法存储。如用户表中的个人 信息,尽可能采用md5加密法加密后保存,这样,即使被 试出相关信息,返回的,也都是加密后的数据,而md5是不 可逆的。这种方法,主要是杜绝攻击者获取网站的用户信息, 从而造成破坏。2) sql注入点探测方法之所以能够成功,最根本的原因 在于asp中request函数的安全漏洞。因为这个函数只负责 获取客户端提交上来的数据,对数据的合法性却无法判别, 而注入者可能构造出来的sql语句又是变化多样,程序员很 难在编写验证程序时,考虑到每一种情况,这就导致数据库 系统会

26、被注入语句的“故意性数据类型错误”诱惑,自动转 换数据类型,并报错,从而泄露了重要信息。因此,改造 request函数,提高其安全性能,保证才是杜绝sql注入的 最根本之法。改造优化以后的request函数如下:function my_request (cs_name, cs_datatype)'cs_name:参数名称-字符型'cs_datatype:参数的数据类型-数字型(1表示 cs_name是数字,0表示cs_name是字符)dim cs_valuecs_value =request (cs_name)if cs_datatype =1 thenif not isnum

27、eric (cs_value) thenresponse, write "所提交的数据"& cs_name & "必须为数字型!”response.endend ifelsecs_value =replace (cs_value, ”“ “ “)end ifmy_request 二 cs_valueend function通过调用这个函数,我们可以对用户提交的一切数据在 提交阶段就进行验证,只要提交到服务器的数据与其必须对 应的数据类型不一致,就在返回程序中的错误报告,而不再 向数据库提交任何操作请求,从而把一切sql注入点的试探 拒之于数据库门外。5结束语加强网站数据安全的保护与防范,是所有网站程序员必 须面对的问题。在access或者

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论