防范sql注入攻击:SQL注入攻击的种类和防范手段

来源:51CTO.com  

观察近来些安全事件及其后果安全专家们已经得到个结论这些威胁主要是通过SQL注入造成虽然前面有许多文章讨论了SQL注入但今天所讨论内容也许可帮助你检查自己服务器并采取相应防范措施

SQL注入攻击种类

知彼知己方可取胜首先要清楚SQL注入攻击有哪些种类

1.没有正确过滤转义

在用户输入没有为转义过滤时就会发生这种形式注入式攻击它会被传递给个SQL语句这样就会导致应用终端用户对数据库上语句实施操纵比方说下面这行代码就会演示这种漏洞:

statement := "SELECT * FROM users WHERE name = '" + userName + "';"





这种代码设计目是将个特定用户从其用户表中取出但是如果用户名被个恶意用户用种特定方式伪造这个语句所执行操作可能就不仅仅是代码作者所期望那样了例如将用户名变量(即username)设置为:

a' or 't'='t此时原始语句发生了变化:

SELECT * FROM users WHERE name = 'a' OR 't'='t';





如果这种代码被用于个认证过程那么这个例子就能够强迫选择个合法用户名赋值't'='t永远是正确

些SQL服务器上如在SQL Server中任何个SQL命令都可以通过这种思路方法被注入包括执行多个语句下面语句中username值将会导致删除“users”表又可以从“data”表中选择所有数据(实际上就是透露了每个用户信息)

a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '%





这就将最终SQL语句变成下面这个样子:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';





其它SQL执行不会将执行同样查询中多个命令作为项安全措施这会防止攻击者注入完全独立查询不过却不会阻止攻击者修改查询

2.Incorrect type handling

如果个用户提供字段并非个强类型或者没有实施类型强制就会发生这种形式攻击当在个SQL语句中使用个数字字段时如果员没有检查用户输入合法性(是否为数字型)就会发生这种攻击例如:

statement := "SELECT * FROM data WHERE id = " + a_variable + ";"





从这个语句可以看出作者希望a_variable是个和“id”字段有关数字不过如果终端用户选择就绕过了对转义需要例如将a_variable设置为:1;DROP TABLE users它会将“users”表从数据库中删除SQL语句变成:SELECT * FROM DATA WHERE id = 1;DROP TABLE users;

3.数据库服务器中漏洞

有时数据库服务器软件Software中也存在着漏洞如MYSQL服务器中mysql_real_escape_漏洞这种漏洞允许个攻击者根据编码执行次成功SQL注入式攻击

4.盲目SQL注入式攻击

个Web应用易于遭受攻击而其结果对攻击者却不见时就会发生所谓盲目SQL注入式攻击有漏洞网页可能并不会显示数据而是根据注入到合法语句中逻辑语句结果显示区别内容这种攻击相当耗时必须为每个获得字节而精心构造个新语句但是旦漏洞位置和目标信息位置被确立以后种称为Abshe工具就可以使这种攻击自动化

5.条件响应

注意种SQL注入迫使数据库在个普通应用屏幕上计算个逻辑语句值:

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1





这会导致个标准面面而语句

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在页面易于受到SQL注入式攻击时它有可能给出个区别结果如此这般次注入将会证明盲目SQL注入是可能它会使攻击者根据另外个表中某字段内容设计可以评判真伪语句

6.条件性差错

如果WHERE语句为真这种类型盲目SQL注入会迫使数据库评判个引起语句从而导致个SQL例如:

SELECT 1/0 FROM users WHERE username='Ralph'显然如果用户Ralph存在被零除将导致

7.时间延误

时间延误是种盲目SQL注入根据所注入逻辑它可以导致SQL引擎执行个长队列或者是个时间延误语句攻击者可以衡量页面加载时间从而决定所注入语句是否为真

以上仅是对SQL攻击粗略分类但从技术上讲如今SQL注入攻击者们在如何找出有漏洞网站WebSite方面更加聪明也更加全面了出现了些新型SQL攻击手段黑客们可以使用各种工具来加速漏洞利用过程我们不妨看看the Asprox Trojan这种木马它主要通过个发布邮件僵尸网络来传播其整个工作过程可以这样描述:首先通过受到控制主机发送垃圾邮件将此木马安装到电脑上然后受到此木马感染电脑会下载段 2进制代码在其启动时它会使用搜索引擎搜索用微软ASP技术建立表单、有漏洞网站WebSite搜索结果就成为SQL注入攻击靶子清单接着这个木马会向这些站点发动SQL注入式攻击使有些网站WebSite受到控制、破坏访问这些受到控制和破坏网站WebSite用户将会受到欺骗从另外个站点下载段恶意JavaScript代码最后这段代码将用户指引到第 3个站点这里有更多恶意软件Software如窃取口令木马

以前我们经常警告或建议Web应用员们对其代码进行测试并打补丁虽然SQL注入漏洞被发现和利用机率并不太高但近来攻击者们越来越多地发现并恶意地利用这些漏洞因此在部署其软件Software的前开发人员应当更加主动地测试其代码并在新漏洞出现后立即对代码打补丁

防御和检查SQL注入手段

1.使用参数化过滤性语句

要防御SQL注入用户输入就绝对不能直接被嵌入到SQL语句中恰恰相反用户输入必须进行过滤或者使用参数化语句参数化语句使用参数而不是将用户输入嵌入到语句中在多数情况中SQL语句就得以修正然后用户输入就被限于个参数下面是个使用Java和JDBC API例子:

PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?"); prep.String(1, pwd);





总体上讲有两种思路方法可以保证应用不易受到SQL注入攻击是使用代码复查 2是强迫使用参数化语句强迫使用参数化语句意味着嵌入用户输入SQL语句在运行时将被拒绝不过目前支持这种特性并不多如H2 数据库引擎就支持

2.还要避免使用解释这正是黑客们借以执行非法命令手段

3.防范SQL注入还要避免出现些详细消息黑客们可以利用这些消息要使用种标准输入确认机制来验证所有输入数据长度、类型、语句、企业规则等

4.使用专业漏洞扫描工具但防御SQL注入攻击也是不够攻击者们目前正在自动搜索攻击目标并实施攻击其技术甚至可以轻易地被应用于其它Web架构中漏洞企业应当投资于些专业漏洞扫描工具如大名鼎鼎AcunetixWeb漏洞扫描个完善漏洞扫描区别于网络扫描它专门查找网站WebSite上SQL注入式漏洞最新漏洞扫描可以查找最新发现漏洞

5.最后企业要在Web应用开发过程所有阶段实施代码安全检查首先要在部署Web应用的前实施安全测试这种措施意义比以前更大、更深远企业还应当在部署的后用漏洞扫描工具和站点监视工具对网站WebSite进行测试

Web安全拉警报已经响起安全形式异常严峻企业绝对不应当草率从事安全重于泰山!



Tags:  注入攻击 注入式攻击 sql注入攻击 防范sql注入攻击

延伸阅读

最新评论

发表评论