SQL注入攻击和其防御策略研究

SQL注入攻击和其防御策略研究摘要:随着互联网Web应用的飞速发展,黑客攻击的手段也在不断翻新,各种新的攻击技术层出不穷。SQL注入攻击是黑客对Web应用进行攻击的常用手段之一。以ASP和SQLServer为例详细阐述了SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节出发,综合探讨防御SQL注入攻击的有效方法和策略。关键词:SQL注入;参数化查询;渗透测试;Web应用防火墙中图分类号:TP393文献标识码:A文章编号:1009-3044(2013)05-1000-02随着互联网Web应用的飞速发展,各类Web网站大量涌现。在这种互联性和开放性坏境下,各种Web应用系统的复杂性和多样性导致了系统漏洞层出不穷,黑客入侵和篡改网站的安全事件时有发生。SQL注入作为直接威胁Web应用的最常见的网络攻击手段之一,一直受到网站开发人员和管理人员的关注。如何有效防御SQL注入攻击是近年来人们讨论的热点问题。SQL注入是针对ASP、PHP、JSP等脚本建站语言的一种入侵手段,理论上它对所有基于SQL语言标准的数据库软件包括SQLServer>Oracle>MySQL、Access等都是有效的。该文以ASP和SQLServer为例阐述SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节深入探讨防御SQL注入攻击的有效方法和策略。1SQL注入攻击的原理和过程所谓SQL注入攻击[1],就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容被直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。SQL注入过程中,攻击者通过从客户端提交构造巧妙的SQL代码,收集服务器返回的结果信息,从而获取想要得到的资料并实施攻击。下面以HTTP://xxx.xxx.xxx/abc.asp?id=25作为测试URL讨论SQL注入攻击的一般过程。1)检测是否有注入漏洞。最简单的方法就是在测试URL的末尾附加一个单引号,提交页面请求后查看服务器的响应情况。如果返回错误信息,则证明程序没有对单引号进行过滤,有可能存在注入漏洞。当然,以上方法对那些实现单引号过滤的应用程序不起作用,此时可以使用下面方法进行检测。在测试URL的后面分别加上“and1=1”和“and1=2”两种注入参数并提交请求,若前者测试的返回结果为正常页面,而后者测试的返回结果为错误信息,则说明可以进行注入。其原理在于若后台程序存在注入漏洞,提交第一种参数则会构成SQL语句"select*from表名whereid二25and1=1”,由于逻辑正确服务器将返回正常页面;提交第二种参数则会构成SQL语句"select*from表名whereid二25and1=2”,由于逻辑错误服务器会返回错误信息。上例只是注入参数为数字型的检测方法,实际应用时还可以使用字符型和搜索型参数进行检测。2)判断数据库类型。一般与ASP最常搭配的数据库是Access和SQLServer,判断时可以从Access和SQLServer的区别入手:Access的系统表是msysobjects,且在Web环境下没有访问权限;而SQLServer的系统表是sysobjects,在Web环境下可以被访问。由此,可在测试URL的尾部注入参数uand(selectcount(*)fromsysobjects)>0”并提交,如果返回正常页面,基本上可以断定是SQLServer数据库;如果返回错误信息,则可以断定是Access数据库。3)破解数据库名。在注入点之后附加参数“and(selectcount(*)frommaster.dbo.sysdatabaseswherename>landdbid=6)0"并提交,由于name字段是一个字符型字段,因此abc.asp工作异常,通过返回的错误信息可得到第一个数据库名。同理将dbid的值分别改成7、8、9……,就可得到所有数据库名。除此之外也可以通过注入参数uanddb_name()>0来获取连接数据库的名称。以下假设得到的数据库名是TestDBo4)猜解用户名表的名称。Web用户的账号一般存放在一张表中,为了获取数据库的访问权限,需要分析可能存放用户名与密码的表的名称。常用的方法有猜解法和读取法:猜解法根据个人的经验猜表名,通过在注入点后附加参数"and(selectcount(*)fromTestDB.dbo.表名)>0"实现;读取法通过构造注入参数访问SQLServer的系统表sysobjects来实现。以下假设此表名为admino5)猜解用户名字段及密码字段的名称。在注入点之后附加参数“and(selec...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?