SQL 注入式攻击的本质

来源:互联网 发布:国产电路仿真软件 编辑:程序博客网 时间:2024/06/03 23:46

SQL 注入式攻击,又是注入式攻击,没想到 2008 年这个老掉牙的东西又出来搅风搅雨,更没想到的是这么老掉牙的东西居然还能跑出来搅风搅雨,而且造成了如此大的破坏,有文章还说注入式攻击还会有 “ 第三波 ” 攻击潮,到时候会更加难以察觉,连微软的大佬都跑出来澄清说与微软的技术与编码无关,微软为此还专门推出了三个检测软件,那么这个 SQL 注入式攻击的漏洞究竟是怎么造成的呢?

 

正如微软的大佬所说的,是由于网站程序的开发人员编码不当造成的,不光是 ASP 、 ASP.NET ,也包括 JSP 、 PHP 等技术,受影响的也不仅仅是 Access 和 SQL Server 数据库,也包括 Oracle 和 MySql 等其他关系数据库,和人家微软没什么关系。事实上不光是基于 B/S 架构的系统或网站存在这样的问题,基于 C/S 架构的系统也存在这样的问题,只不过由于 C/S 架构的特点决定了不可能像 B/S 系统这样影响这么广泛。那么为什么说这个问题是开发人员编码不当造成的呢,下面我们就来具体分析。

 

首先让我们来看一下以下这两条 SQL 查询语句

语句 1 : select * from news where newstype=1

语句 2 : select * from news where newstype=1;drop table news

语句3:select * from news where newstype='社会新闻'

语句4:select * from n ews where newstype='社会新闻';drop table news--'

大家都知道语句 1 的作用是查询 news 表中 newstype 字段值等于 1 的所有记录,其中 newstype 字段的类型是一种数值型,比如 Int 、 SmaillInt 、 TinyInt 、 Float 等等;语句 2 实际上是两条语句,第一条的作用和语句 1 的作用相同,第二条的作用是删除数据库中的 news 表。语句3和语句4的功能和语句1、语句2的基本相同,所不同的是语句3、4里的newstype字段是字符型的,比如:char、varchar、nvarchar、text等等

 

不管是在 ASP 还是 ASP.NET 还是 JSP 或 PHP ,一般我们都会采用“ select * from news where newstype= ” +v_newstype 的方法来构造语句 1 ,或者“select * from news where newstype=' ” +v_newstype+"'"来构造语句3, 其中 v_newstype 是一个变量,如果 v_newstype 的值等于 1 ,构造出来的就是语句 1 了,如果v_newstype的值等于"社会新闻",构造出来的就是语句3了,但是很不幸的是如果我们忽略了对 v_newstype 的检查,通过这个方法构造出来的也可能是语句 2或者语句4 ,比如< /SPAN>v_newstype 的值为“ 1;drop table news ”或“社会新闻';drop table news--”,如果我们的疏忽让别人给利用了,就会给我们造成巨大的损失, SQL 注入式攻击正是利用了我们的这个疏忽,所以说 SQL 注入式攻击的根源来自开发人员的编码不当和你所使用的平台、开发工具以及系统架构等等都没有任何直接的关系。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Gavin_TTYL/archive/2009/08/29/4498269.aspx

原创粉丝点击