WEB开发网
开发学院网络安全安全技术 SQL Server应用程序的高级Sql注入 阅读

SQL Server应用程序的高级Sql注入

 2009-04-04 13:56:50 来源:WEB开发网   
核心提示: 这是因为插入的单引号破坏了原来单引号引住的数据,数据库执行到'hn'时失败,SQL Server应用程序的高级Sql注入(2),如果攻击者这样输入:Forename: jo'; drop table authors-- Surname: ...authors表就会被

这是因为插入的单引号破坏了原来单引号引住的数据,数据库执行到'hn'时失败。如果攻击者这样输入:

Forename: jo'; drop table authors--
Surname:

...authors表就会被删掉,原因过一会再解释。

似乎通过删除用户输入的字符串中的单引号或者通过一些方法避免它们出现可以解决这个问题。诚然如此,但是要实施这个解决方法还有很多的困难。因为首先:不是所有的用户提交的数据都是字符串形式,比如我们的用户输入通过'id'(看上去是个数字)来选择一个用户,我们的查询可能会这样:

select id,forename,surname from authors where id=1234

在这种情况下攻击者可以轻易的在数值输入后面添加SQL语句。在其他SQL方言中,使用着各种分隔符,比如MS Jet DBMS引擎,日期可以用'#'符号来分隔。

其次,避免单引号并不像开始我们想象的那样是必要的解决办法,原因下面讨论。

我们将以Active Server Pages(ASP)登陆页面为例子来详细说明,它访问一个Sql-Server数据库并且验证一个到我们假想的程序的访问。

这是用户填写用户名和密码的表单页面:

〈HTML〉
〈HEAD〉
〈TITLE〉Login Page〈/TITLE〉
〈/HEAD〉
〈BODY bgcolor='000000' text='cccccc'〉
〈FONT Face='tahoma' color='cccccc'〉
〈CENTER〉〈H1〉Login〈/H1〉
〈FORM action='process_login.asp' method=post〉
〈TABLE〉
〈TR〉〈TD〉Username:〈/TD〉〈TD〉〈INPUT type=text name=username size=100%width=100〉〈/INPUT〉〈/TD〉〈/TR〉
〈TR〉〈TD〉Password:〈/TD〉〈TD〉〈INPUT type=password name=password size=100%
width=100〉〈/INPUT〉〈/TD〉〈/TR〉
〈/TABLE〉
〈INPUT type=submit value='Submit'〉 〈INPUT type=reset value='Reset'〉
〈/FORM〉
〈/FONT〉
〈/BODY〉
〈/HTML〉

上一页  1 2 3 4 5 6 7  下一页

Tags:SQL Server 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接