当前位置:首页>>软件教程>>冲浪宝典>>新闻内容  |虚拟主机 主机托管
Web环境下SQL注入攻击的检测与防御
作者: 发布时间:2006-8-8 10:30:29 | 【字体:

摘 要:简要介绍了SQL注入式攻击的原理。在前人提出的“对用户输入信息实施过滤”的技术基础上,建立了一个针对SQL注入攻击的检测/防御/备案通用模型。该模型在客户端和服务器端设置两级检查。对于一般性用户误操作和低等级恶意攻击,客户端的检查将自动做出反应;考虑到客户端检查有可能被有经验的攻击者绕开,特在服务器端设定二级检查。在文中还提出了对高等级恶意攻击的自动备案技术,并给出了相应代码。

    互联网上的安全问题越来越严重,入侵检测(IDS)也因而显得尤为必要。MS SQL Server作为数据库市场的主要产品之一,研究针对他的SQL攻击处理方案,建立一个通用的SQL注入攻击防御、检测、备案模型,对于加强安全建设具有积极的意义。

  1、SQL注入攻击简介

  SQL注入攻击源于英文“SQL Injection Attack”。目前还没有看到一种标准的定义,常见的是对这种攻击形式、特点的描述。微软技术中心从2个方面进行了描述:

  (1)脚本注入式的攻击。

  (2)恶意用户输入用来影响被执行的SQL脚本。

  Stephen Kost给出了这种攻击形式的另一个特征,“从一个数据库获得未经 授权的访问和直接检索”。SQL注入攻击就其本质而言,他利用的工具是SQL的语法,针对的是应用程序开发者编程过程中的漏洞。“当攻击者能够操作数据,往应用程序中插入一些SQL语句时,SQL注入攻击就发生了”。

  由于SQL注入攻击利用的是SQL语法,使得这种攻击具有广泛性。理论上说,对于所有基于SQL语言标准的数据库软件都是有效的,包括MS SQL Server,Oracle,DB2,Sybase,MySQL等。当然,各种软件有自身的特点,最终的攻击代码可能不尽相同。SQL注入攻击的原理相对简单,易于掌握和实施,并且整个Internet上连接有数目惊人的数据库系统(仅在中国,截至2003年3月的统计就有82 900多个),在过去的几年里,SQL攻击的数量一直在增长。

  2、SQL注入式攻击的检测及跟踪

  2.1SQL攻击检测/防御/跟踪模型

  针对SQL攻击的防御,前人做过大量的工作,提出的解决方案包括 :

  (1)封装客户端提交信息。

  (2)替换或删除敏感字符/字符串。

  (3)屏蔽出错信息以及。

  (4)在服务端正式处理之前对提交数据的合法性进行检查等。

  方案(1)的做法需要RDBMS的支持,目前只有Oracle采用该技术;方案(2)是一种不 完全的解决措施,举例来说明他的弱点,当客户端的输入为“…ccmdmcmdd…”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是“…cmd…”;方案(3)的实质是在服务端处理完毕之后进行补救,攻击已经发生,只是阻止攻击者知道攻击的结果;方案(4)被多数的研究 者认为是最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作。方案(4)与(2)的区别在于,方案(4)一旦检测到敏感字符/字符串,针对数据库的操作即行中止,而方案(2)是对有问题的客户端输入做出补救,不中止程序后续操作。方案(2)虽然在一定程度上有效,但有“治标不治本”的嫌疑,新的攻击方式正在被不断发现,只要允许服务端程序使用这些提交信息,就总有受到攻击的可能。

  因此,本文中针对SQL注入攻击的检测/防御/备案模型即基于提交信息的合法性检 查,在客户端和服务端进行两级检查,只要任一级检查没有通过,提交的信息就不会进入query语句,不会构成攻击。在客户端和服务端进行合法性检查的函数基本相同。客户端检查的主要 作用是减少网络流量,降低服务器负荷,将一般误操作、低等级攻击与高等级攻击行为区分开来。技术上,客户端的检查是有可能被有经验的攻击者绕开的,在这种情形下,提交的数据被直接发往服务端,通过在服务器端设定二级检查就显得十分必要。由于正常提交到服务端的数据已经在客户端检查过,因此,服务端检查到的提交异常基本可以认定为恶意攻击行为所致,中止提交信息的处理,进行攻击备案,并对客户端给出出错/警告提示。对应模型简图如图1所示。

 2.2检 测

  对提交信息的检查,主要包括数据类型检查、数据长度检查和敏感字符过滤。前两项可利用函数直接办到,敏感字符过滤则需要应用开发方做相应开发。经过总结,对语句时必须用到的,因此可以针对这些敏感字符,设定过滤函数,在把这些上传的参数结合到查询语句之前对他们进行过滤。下面的2个函数即过滤模块的主要代码:


 

  提交非法字符的人,都有可能是SQL注入攻击者。但考虑到用户在正常使用中的误操作也有提交非法字符/字符串的可能,因此客户端的一级检查无论对用户误操作,还是一般性攻击,所做出处理措施只是中止信息提交,给出友好的出错提示。在经过一级检查以后提交到服务器端的信息中仍然包括非法字符/字符串的,惟一的可能是攻击者绕开了客户端的一级检查。对于这种危险的信号,服务器端将从收到的提交信息数据包中提取攻击源的IP地址,存入数据库备查,同时中止针对数据库的操作.


 


 


 


 

  3、结语

  由于SQL注入攻击针对的是应用开发过程中的编程不严密,因而对于绝大多数防火墙来说,这种攻击是“合法”的。问题的解决只有依赖于完善编程。专门针对SQL注入攻击的工具较少,Wpoison对于用asp,php进行的开发有一定帮助。本文中的DDL模型作为一个整体解决方案,对代码稍加变动也可用于SQL Server以外的关系数据库。已经将该模型应用于某单位的Web数据库开发,取得了良好的效果。本文中给出的代码在Windows 2000 Server+SQL Server 2000环境测试通过。


文章来源:
·商业周刊:Web2.0网站的漫长上市路
·IT外包遭遇困境 Web2.0打破管理僵局
·什么是web2.1?web2.1技术演示(中英文)
·检查并堵住网站的eWebEditor漏洞
·web2.0最全的国外API应用集合
·如何利用MySQL加密函数保护Web网站敏感数据
·嵌入式广告是中国Web2.0的救命稻草吗?
·四大差别:Web2.0不等于互联网泡沫
·Seomoz公布2007年度Web2.0大奖
·Web2.0 网站设计指南
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我