|
知识路径: > 电子商务系统程序设计基础 > 电子商务系统建设 > 电子商务系统安全设计 > 安全措施设计 > 防止SQL注入攻击 >
|
相关知识点:2个
|
|
|
|
|
在用户输入的数据没有过滤转义字符时,就会发生这种形式的注入式攻击。例如在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注入。
|
|
|