|
知识路径: > 电子商务系统程序设计基础 > 电子商务系统建设 > 电子商务系统安全设计 > 安全措施设计 >
|
被考次数:1次
被考频率:低频率
总体答错率:43%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:6个
|
|
|
|
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。很多程序员在编写代码的时候,没有对用户输入数据的合法性进行验证,使应用程序存在安全隐患。如果用户在提交数据时,提交了一段数据库查询代码,而程序在没有做输入数据合法性验证的情况下,就会根据提交的查询代码执行并返回结果,从而获得数据库中的数据,这就是所谓的SQL Injection,即SQL注入攻击。
|
|
|
|
|
在用户输入的数据没有过滤转义字符时,就会发生这种形式的注入式攻击。例如在ASP.NET程序中,用户登录时,使用下面的SQL语句查询用户的合法性:
|
|
|
|
这条代码的设计功能根据输入的用户名和密码在用户表中查找数据,但是,如果密码被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不是预计的功能了。例如,将密码变量(即sw_password)设置为:
|
|
|
|
|
|
SQL查询条件'1'='1'永远是正确的,因此不管用户名和密码合不合法,只要用户表中存在数据,那么一定能查到记录,也就可以成功登录系统了。甚至还有一些SQL注入可以删除数据、非法查询所有数据等。下面语句中的密码值将会导致删除用户表,还可以从“sw_product”表中选择所有的数据。
|
|
|
|
|
|
造成这些安全威胁的原因就是没有过滤转义字符,如果对用户输入的内容中的“’”等SQL语句中的特定字符进行转义,这种形式的SQL注入将会出现SQL语法错误、无法执行,从而避免了漏洞。
|
|
|
|
如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如:
|
|
|
|
这条语句设计的目的是通过数字型的值查找用户。但是如果变量userid类型是字符串型,将userid设置为:“1;DROP TABLE sw_users”,SQL语句变成:
|
|
|
|
|
|
当一个Web应用程序遭受攻击而又不显示其结果,就会发生所谓的盲目SQL注入式攻击。有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。这种攻击相当耗时,因为必须为每一个获得的字段而精心构造一个新的语句。
|
|
|
|
如果SQL语句中的WHERE条件为真,这种类型的盲目SQL注入会迫使数据库执行一个引起错误的语句,从而导致一个SQL错误。例如:
|
|
|
|
显然,如果用户名为“zhangsan”的记录存在,被零除将导致错误。
|
|
|
|
时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。
|
|
|
实际中SQL注入攻击还有很多种,而且将来可能还会有新的类型出现。这里只介绍了一些常见的SQL注入。
|
|
|
|
|
要防御SQL注入,用户的输入就不能直接被嵌入到SQL语句中,必须经过过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。例如,在ASP.NET程序中:
|
|
|
|
|
(2)在程序出现错误或异常时,要避免出现一些详细的错误或异常消息,因为这些信息会为攻击者带来方便。
|
|
|
(3)在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,其次,企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。
|
|
|