SQL注入攻击的种类
考试要求: 了解     
知识路径:  > 电子商务系统程序设计基础  > 电子商务系统建设  > 电子商务系统安全设计  > 安全措施设计  > 防止SQL注入攻击


 
       (1)没有正确过滤转义字符。
       在用户输入的数据没有过滤转义字符时,就会发生这种形式的注入式攻击。例如在ASP.NET程序中,用户登录时,使用下面的SQL语句查询用户的合法性:
       
       这条代码的设计功能根据输入的用户名和密码在用户表中查找数据,但是,如果密码被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不是预计的功能了。例如,将密码变量(即sw_password)设置为:
       
       此时原始语句为:
       
       SQL查询条件'1'='1'永远是正确的,因此不管用户名和密码合不合法,只要用户表中存在数据,那么一定能查到记录,也就可以成功登录系统了。甚至还有一些SQL注入可以删除数据、非法查询所有数据等。下面语句中的密码值将会导致删除用户表,还可以从“sw_product”表中选择所有的数据。
       
       此时原始语句为:
       
       造成这些安全威胁的原因就是没有过滤转义字符,如果对用户输入的内容中的“’”等SQL语句中的特定字符进行转义,这种形式的SQL注入将会出现SQL语法错误、无法执行,从而避免了漏洞。
       (2)类型不正确的处理。
       如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如:
       
       这条语句设计的目的是通过数字型的值查找用户。但是如果变量userid类型是字符串型,将userid设置为:“1;DROP TABLE sw_users”,SQL语句变成:
       
       该语句会将"sw_users"表从数据库中删除。
       (3)盲目SQL注入式攻击。
       当一个Web应用程序遭受攻击而又不显示其结果,就会发生所谓的盲目SQL注入式攻击。有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。这种攻击相当耗时,因为必须为每一个获得的字段而精心构造一个新的语句。
       (4)条件性差错。
       如果SQL语句中的WHERE条件为真,这种类型的盲目SQL注入会迫使数据库执行一个引起错误的语句,从而导致一个SQL错误。例如:
       
       显然,如果用户名为“zhangsan”的记录存在,被零除将导致错误。
       (5)时间延误。
       时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。
       实际中SQL注入攻击还有很多种,而且将来可能还会有新的类型出现。这里只介绍了一些常见的SQL注入。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有