SQL 注入式攻击的本质

 更新时间:2008年12月22日 15:34:43   作者:  
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 news 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,比如v_newstype的值为“1;drop table news”或“社会新闻';drop table news--”,如果我们的疏忽让别人给利用了,就会给我们造成巨大的损失,SQL注入式攻击正是利用了我们的这个疏忽,所以说SQL注入式攻击的根源来自开发人员的编码不当和你所使用的平台、开发工具以及系统架构等等都没有任何直接的关系。

既然SQL注入式攻击是由于编码人员编码不当造成的,那究竟怎么样的编码才是恰当的编码才不会受到SQL注入攻击呢,下一篇我们将继续介绍。

相关文章

  • 收藏的SQLServer技巧集

    收藏的SQLServer技巧集

    收藏的SQLServer技巧集...
    2007-03-03
  • GBase与梧桐数据库窗口函数使用的方法比较

    GBase与梧桐数据库窗口函数使用的方法比较

    这篇文章主要给大家介绍了关于GBase与梧桐数据库窗口函数使用的比较,文中包括排序类和统计类窗口函数的定义、语法和示例,窗口函数可以进行复杂的数据分析,提高查询性能,并适应不同的数据分析需求,需要的朋友可以参考下
    2024-11-11
  • 在PostgreSQL中实现递归查询的教程

    在PostgreSQL中实现递归查询的教程

    这篇文章主要介绍了在PostgreSQL中实现递归查询的教程,包括在递归查询内排序等方法的介绍,需要的朋友可以参考下
    2015-04-04
  • 利用Navicat Premium导出数据库表结构信息至Excel的方法

    利用Navicat Premium导出数据库表结构信息至Excel的方法

    这篇文章主要介绍了利用Navicat Premium导出数据库表结构信息至Excel的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • SQL中IS NOT NULL与!=NULL的区别

    SQL中IS NOT NULL与!=NULL的区别

    这篇文章主要介绍了SQL中IS NOT NULL与!=NULL的区别,本文详细诉说了它们的区别,以及推荐使用方法,需要的朋友可以参考下
    2015-06-06
  • SQL中一些小巧但常用的关键字小结

    SQL中一些小巧但常用的关键字小结

    这篇文章主要给大家总结介绍了关于SQL中一些小巧但常用的关键字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 如何利用分析函数改写范围判断自关联查询详解

    如何利用分析函数改写范围判断自关联查询详解

    这篇文章主要给大家介绍了关于如何利用分析函数改写范围判断自关联查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • SQL SERVER的字段类型说明

    SQL SERVER的字段类型说明

    以下为SQL SERVER 7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考
    2008-04-04
  • 实例介绍SQL注入以及如何解决

    实例介绍SQL注入以及如何解决

    这篇文章主要给大家介绍了关于SQL注入以及如何解决的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • redis数据库查找key在内存中的位置的方法

    redis数据库查找key在内存中的位置的方法

    这篇文章主要介绍了redis数据库查找key在内存中的位置的方法,需要的朋友可以参考下
    2014-03-03

最新评论