APP下载

浅谈SQL注入攻击与防范

2013-09-17潘号良汪光一陆新华

网络安全技术与应用 2013年1期
关键词:字符串用户名口令

潘号良 汪光一 陆新华

北京卫戍区指挥自动化工作站 北京 100740

0 前言

随着web应用程序的流行和普及,SQL注入攻击技术也随之出现,该种攻击技术被广为利用。根据网络统计,每年都有数万个网站遭受SQL注入式攻击,其中不乏知名网站。更有甚者,现在出现了新型的攻击方法。利用软件自动搜索web应用程序的SQL漏洞,自动生成注入脚本,进行攻击,造成web应用程序的破坏。

1 什么是“SQL注入”攻击

对于 Web应用程序来说,很多都使用数据库来存储信息。SQL命令就是前端 Web和后端数据库之间的接口,使得数据可以传递至Web应用程序。很多Web站点都会利用用户输入的参数动态地生成 SQL查询要求,攻击者通过在URL、表单域,或者其他的输入域中输入自己的SQL命令,以此改变查询属性,骗过应用程序,从而可以对数据进行不受限的访问。

SQL注入漏洞成因在于 Web应用程序对用户提交的数据未做充分检查过滤。用户提交的数据可能会在程序里被用来构造访问后台数据库的SQL指令,如果这些数据过滤不严格就有可能被插入恶意的SQL代码,从而非授权操作后台的数据库,导致从敏感信息泄露、破坏数据库内容和结构。利用SQL注入漏洞可以构成对Web服务器的直接攻击,还可能利用服务器攻击第三方浏览网站的其他用户。

2 “SQL注入”攻击简单举例

我这里以大家常见的用户身份认证的简单 Web应用程序为例进行讲解。假定这个应用程序提供一个登录页面,在这个界面里要求用户输入用户名和口令,然后通过HTTP请求发送用户名和口令,之后,Web应用程序检查用户传递过来的用户名和口令跟数据库中的用户名和口令是否匹配。这种情况下,我们假定数据库中存在一个名称为 user_table的表,该表包括三个字段,分别为用户 id(用以标识该用户)、用户名称username、用户密码userpassword。

web应用程序代码如下:

开头两行代码从HTTP请求中取得用户输入,然后在下一行开始构造一个 SQL查询。执行查询,然后在 while()循环中得到结果,如果一个用户名和口令对匹配,就会返回正确的ID。否则,id的值仍然为-1,这意味着用户没有通过认证。表面上看,如果用户名和口令对匹配,那么该用户通过认证;否则,该用户不会通过认证——但是,事实果真如此吗?非也!读者也许已经注意到了,这里并没有对SQL命令进行设防,所以攻击者完全能够在用户名或者口令字段中注入SQL语句,从而改变SQL查询。为此,我们仔细研究一下上面的SQL查询字符串:

上述代码认为字符串username和password都是数据,不过,攻击者却可以随心所欲地输入任何字符。如果一位攻击者输入的用户名为’OR 1=1--,而口令为x,那么查询字符串将变成下面的样子:

该双划符号--告诉SQL解析器,右边的东西全部是注释,所以不必理会。这样,查询字符串相当于:

如今的SELECT语句跟以前的已经大相径庭了,因为现在只要用户名为长度为零的字符串''或 1=1这两个条件中一个为真,就返回用户标识符ID——我们知道,1=1是恒为真的。所以这个语句将返回user_table中的所有ID。在此种情况下,攻击者在username字段放入的是SQL指令'OR1=1--而非数据。

3 一个防范“SQL注入”攻击简单程序

近段时间修改一个ASP程序(有SQL注入漏洞),于是利用instr函数,写出这个ASP函数,供大家参考。以下是函数片段:

使用sqlsaferequest函数替换Request。

4 小结

我们在本文中介绍了注入攻击的原理。然后通过一个简单的程序事例详细介绍了 SQL注入攻击的过程,使我们对SQL注入攻击有了一个深入的认识。最后给出了一个防范SQL注入攻击的简单函数。要想有效防范SQL注入攻击,需要大家平时提高意识,多对web应用程序进行SQL攻击测试,及早发现漏洞,堵住漏洞。

[1](美)克拉克著,黄晓磊,李化译.SQL 注入攻击与防御[M].清华大学出版社.2010.

[2]孙建舒.SQL注入式攻击与防范.计算机与信息技术[J].2011.

[3]吴贵山.SQL注入攻击防御策略的研究.计算机与网络[J].2012.

猜你喜欢

字符串用户名口令
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
基于文本挖掘的语词典研究
《护士进修杂志》投稿程序
高矮胖瘦
口 令
机智的快递员
好玩的“反口令”游戏
SNMP服务弱口令安全漏洞防范
最简单的排序算法(续)