安全测试之SQL注入攻击

一、SQL注入攻击的概念

首先说一下,攻击者之所以可以利用自己输入的数据来达到攻击网站的目的,原因就在于SQL语言作为一种解释型语言,它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。正是这个原因,攻击者可以构造对自己有利的数据,利用网站的一些SQL漏洞来达到恶意的目的。

SQL注入,就是指攻击者将恶意的字符串或者语句等信息作为参数输入,服务器在验证这个字段的时候,读取攻击者输入的数据,将其作为正常的值参与SQL语句的查询,试想,如果攻击者输入了一个字符串,在SQL语句执行之后,可以导致删除表等操作,对于一个应用来说,影响是很大的。

二、SQL注入攻击的一个简单实例

某网站的登录功能,用户登录页面需要填写用户名和密码,假设如果其中一个用户名和密码是admin和123456,当用户输入在相应的表单中输入正确的用户名和密码之后,此应用的相应函数执行一定的验证(验证用户名和密码是否匹配),服务器执行SQL语句(表名是user):select * from user where username=’username’ and pwd=’password’,逻辑是如果这个查询语句返回结果不为0,则认为是验证通过,即可以登录成功的用户。

如果某用户输入admin和123456,即执行语句:select * from user where username=’admin’ and pwd=’123456’,执行结果不为0,所以用户登录成功。

如果一个用户输入test’ or 1=’1和111111,即执行语句:select * from user where username=’test’ or 1=’1’ and pwd=’111111’,因为此查询语句中1=’1’的结果为1,or 1=’1’使查询条件始终返回1,因此此语句的查询结果不为0,这样,此用户没有使用正确的用户名和密码也可以登录成功,这就是SQL注入的一个简单实例。

三、SQL注入的后果

SQL注入攻击的危害性还是比较严重的,对于一个有经验的SQL注入攻击者,如果网站存在SQL注入的漏洞,攻击者利用一些恶意的字符串可以进行一些表格的查询甚至更改和删除,也就是说,这个安全漏洞会把数据表及其结构显示在攻击者的面前,攻击者甚至可以利用一些手段来进行其他更严重的攻击等。

四、SQL注入一般会出现在哪些地方?

1、含有输入数据表单的页面(登录界面、查询界面、反馈界面等),即使是hidden的表单也有可能存在这个问题。

2、含有用户信息、ID等的URL(类似于http://XXX/index.asp?ID=155),可以操作ID后的参数数据。

五、SQL注入的防范措施

1、从开发者的角度来说,防范措施如下:
    (1) 转义敏感字符及字符串
            SQL的敏感字符包括:
         “exec”, “xp_”, “sp_”, “declare”, “cmd”, “Union”, “+”, “//”,              ”..”, “;”, “’”, “–”, “%”, “0x”, “><=!-*/()|” ,和空格。
    (2) 屏蔽出错信息:阻止攻击者知道攻击的结果
    (3) 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三 项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客 户端的输入合法之前,服务端拒绝进行关键性的处理操作.

2、从测试人员的角度来说,防范措施是:
在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:需求中应说明表单中某一field的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符);需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示等。

Note:上述实例只是最简单的一种类型,便于理解,稍微复杂的实例请参考:
1. http://www.jb51.net/hack/200734.html
2. http://www.jb51.net/hack/41493.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值