SQL注入攻击的简单示例:
          statement := "SELECT * FROM Users WHERE Value= " + a_variable + " 
        上面这条语句是很普通的一条SQL语句,他主要实现的功能就是让用户输入一个员工编号然后查询处这个员工的信息。但是若这条语句被不法攻击者改装过后,就可能成为破坏数据的黑手。如攻击者在输入变量的时候,输入以下内容SA001’;drop table c_order--。那么以上这条SQL语句在执行的时候就变为了SELECT * FROM Users WHERE Value= ‘SA001’;drop table c_order--。

  这条语句是什么意思呢?‘SA001’后面的分号表示一个查询的结束和另一条语句的开始。c_order后面的双连字符 指示当前行余下的部分只是一个注释,应该忽略。如果修改后的代码语法正确,则服务器将执行该代码。系统在处理这条语句时,将首先执行查询语句,查到用户编号为SA001 的用户信息。然后,数据将删除表C_ORDER(如果没有其他主键等相关约束,则删除操作就会成功)。只要注入的SQL代码语法正确,便无法采用编程方式来检测篡改。因此,必须验证所有用户输入,并仔细检查在您所用的服务器中执行构造 SQL命令的代码。

 SQL注入攻击原理。

  可见SQL注入攻击的危害性很大。在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理。这有利于管理员采取有针对性的防治措施。

  SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现。

  SQL注入式攻击的主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。

  注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。

 posted on 2012-05-22 11:22  蔡傑儒  阅读(10101)  评论(0编辑  收藏  举报