当前位置:七道奇文章资讯安全技术网络技术
日期:2009-06-16 14:56:00  来源:本站整理

SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具[网络技术]

赞助商链接



  本文“SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
 
1.关于SQL Injection
迄今为止,我基本没有看到谁写出一篇很完好的文章,大概说很成熟的办理筹划(能做到 的人必定很多,问题是没有传播开来,很遗憾) 我简单的说几点,但愿启迪大家考虑,起到举一反三的作用
 
1、SQL Injection的原理
SQL Injection的实现办法和破坏作用有很多,但万变不离其宗,其原理可以概括为一句话 :SQL Injection就是向服务器端提交事前预备好的数据,凑合出攻击者想要的SQL语句,以改变数据库操作履行筹划.
我想,这么说大概不算精辟,但意思应当很明确了,这句话主要包含这么三层意思:
1.攻击者通过何种途径注入?
存在SQL Injection漏洞的地方都是利用程序需求按照客户端环境构造SQL语句的地方.由此可以推论,只要存在"客户端数据替换预定义变量"的地方,就有大概被注入.
客户端提交数据可以有很多种方法:GET,POST,Client-Agent,Cookie,Server Enviroment...
2.攻击者为什么可以将它想要的语句"注入"?
因为服务器端利用程序采取凑合(请分外留神这个词)SQL语句的方法,这使得攻击者有机会在提交的数据中包含SQL关键字大概运算符,来构造他们想要的语句.
3.SQL Injection终究后果是什么?
改变数据库操作履行筹划.
这个后果不一定是恶意的,只要你的SQL语句没有按照你预期的筹划(plan)履行,那么就 可以视为被注入了,不管提交数据的人是不是恶意的.
设有这样的sql语句:
update tableName set columnName1 = " $Client_Submit_Data " where PK_ID = 1234
$Client_Submit_Data是一个变量,它代表客户端提交的数据,这里我就不管环境是ASP还 是PHP还是其他什么东西了.
假定这个操作是要更新一篇文章的标题,很多人是不是会这么构造SQL语句?我们看看$Cl ient_Submit_Data包含引号的情形,令$Client_Submit_Data = 谁能奉告我"sql injecti on"是什么?
那么sql语句将被凑合成这样:
update tableName set columnName1 = "谁能奉告我"sql injection"是什么?" where PK_ID = 1234
履行后果很明显,将履行这样的语句:update tableName set columnName1 = "谁能奉告我"
where子句被忽视掉了,很遗憾,你的数据库中全部文章标题城市被update为"谁能奉告我 "
 
在这个例子当中,用户应当是无心的——标题里面包含引号应当很正常吧——但后果却和SQL Injection无异.
好啦,说了半天废话,言归正传,说一下若何应对这种问题.
 
我相信这里的朋友都看过很多避免SQL Injection的文章了,也大都会通过replace来防备一些注入,问题是:你们知其然的时刻能否知其所以然?
我认为,完好办理SQL Injection的最好办法是:避免凑合SQL语句.这就是我在上面要大家分外注意凑合这个词的缘由.
SQL Injection之所以有机可乘,是因为绝大大都Server Application采取凑合SQL语句的方法来构建利用程序(阅读这个帖子的诸位,你们回顾想想自己的项目,有几个不是通过凑合SQL语句的方法来操作数据库?想想你们见过的被注入的案例,有几个不是采取的凑合SQL语句的利用),所谓凑合SQL语句,简单一点说就是:用衔接字符串操作(ASP中的&和PHP中的.)将SQL关键字和客户端提交的数据衔接起来并发送给DBMS履行.这样做直接招致 DBMS根本不知道你筹划(plan to)做什么,而只知道你要(is to)做什么,不是吗,服务器脚本老是将要履行的SQL语句构造好,然后发给数据库,DBMS根本不知道客户端数据 替换了变量之后,这个语句的履行筹划能否有改变.服务器脚本老是粗鲁的奉告DBMS:你只管这么做好了,别问我为什么.就像上面我提到的更新文章标题的例子,DBMS不知道你只想更新第1234篇文章的标题,它认为你就是要把全部的标题都变成这个,因为你的语句就是没有where子句嘛!
 
说到这里,大概大家都懂得了,所谓的最好办法是Stored Procedure.Yes! That is!
要想做出安全坚固的Server application,你最好把自己当作两个人,一个DBA,一个Coder(ASP Coder,PHP Coder or others),很多人常常只知道:我在做一个BBS,我在做一个留言本,我在做一个新闻公布系统,我们的流程都是这样的,给用户一个表单,让用户提交,然后去写数据库,用的时刻按照条件把数据记录找出来,然后显示.没事,假如你 是一个业余爱好者,只想自己写点小东西玩玩,这充足了!假如你想把WebDev作为你的职业,大概说,你想成为一个非常专业的业余爱好者,你必须当自己是一个DBA+Coder,至于要不如果一个Designer就看你的本领和精神咯!
 
好了,点到为止,我就说这么多,完好的办理办法是要在DBMS上写入你的数据操作筹划,让服务器在开始履行之前知道你的企图,不要粗鲁的奉告它:我就是要你履行这个号令,不要问我为什么!
 
实现办法嘛,目前对比广泛的,也对比简单实现的就是存储历程了,利用存储历程不但可以从根本上办理SQL Injection这个安全问题,还会使得你的利用程序速度成倍增长(这个增长的幅度乃至大概到达一个数目级,这跟很多因素有关,不好一概而论),还会使得你开辟的系统更想大型系统,拥有更好的架构体系(比方MVC情势).
 
在 MySQL 4.1.x及后来续版本和ODBC中,供应了一种叫做prepared statements的东西,它 本质上也是一种存储历程,一种系统预置(相关于用户自定义)的存储历程.
假如你没有条件用上存储历程(比方数据库不支持,MySQL,Access,SQLite等都不支持),那么就只能将SQL Injection扼杀在摇篮里了.办理办法,我也只简单的说一句:不要相信任何来自客户端的数据.这个客户端的数据,可以通过很多途径被提交,比方get,post ,cookie,browser参数,IP地址,等等,只要不是服务器上获得的就都算客户端数据,只如果客户端数据,都是不可托的,在TCP/IP这个大框架下,什么都是可以假造的,包含IP地址.
 
但凡来自客户端的数据,必须校验——注意是校验,不是过滤.基本上,不管你多聪明多细心(哪怕像我一样,不准笑,不准笑,严厉点,严厉点,我们这儿讲SQL Injection呢) 也无法穷举大概被用于SQL Injection的标记和关键字,也无法预知替换掉他们能否会有副 作用,最好的办法是不去判断什么数据不符合条件,而改由判断什么数据符合条件,假定你的一个系统用户名只能是字母数字和下划线,那么你便可以用[0-9a-zA-Z_]+这个正则来匹配它,假如不符合条件,拒之便可,这比费尽心机去过滤单引号分号逗号空格什么的要明了和简便的多.
当然假如你嫌存储历程麻烦,你也可以利用参数化SQL语句,至少在asp.net可以这么做,请见本人的一篇文章:《在ADO.NET中利用参数化SQL语句的大同小异》,网址是:http://blog.csdn.net/zhoufoxcn/archive/2008/03/19/2195618.aspx,介绍在asp.net中利用参数化SQL语句应注意的事项.
 
春节前夕,数万个用PHPBB作为论坛网站被攻陷,大家有印象吗?罪魁祸首只是一个单引 ,固然PHP有magic_quotes_gpc,可还是被干掉了,缘由是%2527在url_decode函数中会被解析为%27(因为%25就是百分号),%27恰是引号,By the way,固然博客中国的论坛也 是基于PHPBB的,但是那次我们幸免于难,因为在那之前我们被黑过一次了(汗),就是因为这个,哈哈! 其实,SQL Injection不是ASP编程范畴特有的,Web开辟最简单碰到,但Desktop Application也有,只要有数据库的地方,只要采取凑合SQL语句的方法,便大概存在Injection的机会,大家紧记,假若有条件,尽大概把数据DBMS职责范围的事情交给DBMS去做,假如没条件,一定要注意校验客户端提交的数据,当然,双管齐下也行,^_^
 
好了,最后,说句话给那些有志于从事WebDev工作的朋友,假如将来你进入这个范畴,你把总结出来这篇文章,你应当会很顺利的通过面试,并得到一个不错的薪水等级.
 
附:微软公布3款SQL Injection攻击检测工具
随着 SQL INJECTION 攻击的明显增添,微软近日公布了三个免费工具,帮忙网站管理员和检测存在的风险并对大概的攻击举行拦阻.
 
Scrawlr
下载地址:https://download.spidynamics.com/Products/scrawlr/
这个微软和 HP合作开辟的工具,会在网站中爬行,对全部网页的查询字符串举行解析并发现此中的 SQL INJECTION 风险.Scrawlr 利用了部份 HP WebInspect  相同的技术,但只检测 SQL INJECTION 风险.Scrawlr 从一个起始 URL 进口,爬遍整个网站,并对站点中全部网页举行解析以找到大概存在的漏洞.
 
Microsoft Source Code Analyzer for SQL Injection
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=58A7C46E-A599-4FCB-9AB4-A4334146B6BA&displaylang=en
这款被称作 MSCASI 的工具可以检测 ASP 代码并发现此中的 SQL INJECTION 漏洞(ASP 代码以 SQL INJECTION 漏洞著称),你需求向 MSCASI 供应原始代码,MSCASI 会帮你找到存在风险的代码位置.
 
URLScan 3.0
下载地址: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1697
该工具会让 IIS 限制某些范例的 HTTP 恳求,通过对特定 HTTP 恳求举行限制,可以避免某些有害的恳求在服务器端履行.UrlScan 通过一系列关键词发现恶意恳求,并禁止恶意恳求的履行.

  以上是“SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .