首页 > 知识点讲解
       防止SQL注入攻击
知识路径: > 电子商务系统程序设计基础 > 电子商务系统建设 > 电子商务系统安全设计 > 安全措施设计 > 
被考次数:1次     被考频率:低频率     总体答错率:43%     知识难度系数:     
相关知识点:6个      
        SQL注入攻击是黑客对数据库进行攻击的常用手段之一。很多程序员在编写代码的时候,没有对用户输入数据的合法性进行验证,使应用程序存在安全隐患。如果用户在提交数据时,提交了一段数据库查询代码,而程序在没有做输入数据合法性验证的情况下,就会根据提交的查询代码执行并返回结果,从而获得数据库中的数据,这就是所谓的SQL Injection,即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注入。
               防止SQL注入攻击的措施
               (1)使用参数化的过滤性语句。
               要防御SQL注入,用户的输入就不能直接被嵌入到SQL语句中,必须经过过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。例如,在ASP.NET程序中:
               
               这段程序就使用了参数化的SQL语句。
               (2)在程序出现错误或异常时,要避免出现一些详细的错误或异常消息,因为这些信息会为攻击者带来方便。
               (3)在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,其次,企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

点击这里给我发消息 点击这里给我发消息 点击这里给我发消息

商务合作

点击这里给我发消息

客服邮箱service@rkpass.cn


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