sqlinjection(sql注入)介绍及sqlinjection攻击检测工具

sqlinjection(sql注入)介绍及sqlinjection攻击检测工具

ID:22377441

大小:53.50 KB

页数:5页

时间:2018-10-28

sqlinjection(sql注入)介绍及sqlinjection攻击检测工具_第1页
sqlinjection(sql注入)介绍及sqlinjection攻击检测工具_第2页
sqlinjection(sql注入)介绍及sqlinjection攻击检测工具_第3页
sqlinjection(sql注入)介绍及sqlinjection攻击检测工具_第4页
sqlinjection(sql注入)介绍及sqlinjection攻击检测工具_第5页
资源描述:

《sqlinjection(sql注入)介绍及sqlinjection攻击检测工具》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、SQLInjection(SQL注入)介绍及SQLInjection攻击检测工具>>教育资源库  1.关于SQLInjection  迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的解决方案(能做到的人肯定很多,问题是没有流传开来,很遗憾)我简单的说几点,希望启发大家思考,起到抛砖引玉的作用  一、SQLInjection的原理  SQLInjection的实现方法和破坏作用有很多,但万变不离其宗,其原理可以概括为一句话:SQLInjection就是向服务器端提交事先准备好的数据,拼凑出攻击者想要的SQL语句,以改变数据库操作执行计划。  我想,这么说也许不

2、算精炼,但意思应该很明确了,这句话主要包含这么三层意思:  1.攻击者通过何种途径注入?  存在SQLInjection漏洞的地方都是应用程序需要根据客户端环境构造SQL语句的地方。由此可以推论,只要存在客户端数据替换预定义变量的地方,就有可能被注入。  客户端提交数据可以有很多种方式:GET,POST,Client-Agent,Cookie,ServerEnviroment...  2.攻击者为什么可以将它想要的语句注入?  因为服务器端应用程序采用拼凑(请特别留意这个词)SQL语句的方式,这使得攻击者有机会在提交的数据中包含SQL关键字或者运算符,来构造他们想要的语句

3、。  3.SQLInjection最终结果是什么?  改变数据库操作执行计划。  这个结果不一定是恶意的,只要你的SQL语句没有按照你预期的计划(plan)执行,那么就可以视为被注入了,不管提交数据的人是不是恶意的。  设有这样的sql语句:  updatetableNamesetcolumnName1=$Client_Submit_Datait_Data是一个变量,它代表客户端提交的数据,这里我就不管环境是ASP还是PHP还是其他什么东西了。  假设这个操作是要更新一篇文章的标题,很多人是不是会这么构造SQL语句?我们看看$Client_Submit_Data包含引号的

4、情况,令$Client_Submit_Data=谁能告诉我sqlinjection是什么?  那么sql语句将被拼凑成这样:  updatetableNamesetcolumnName1=谁能告诉我sqlinjection是什么?esetcolumnName1=谁能告诉我  dash;标题里面包括引号应该很正常吧但结果却和SQLInjection无异。  好啦,说了半天废话,言归正传,说一下如何应对这种问题。  我相信这里的朋友都看过很多防止SQLInjection的文章了,也大都会通过replace来防范一些注入,问题是:你们知其然的时候是否知其所以然?  我认为,彻底

5、解决SQLInjection的最好方法是:避免拼凑SQL语句。这就是我在上面要大家特别注意拼凑这个词的原因。  SQLInjection之所以有机可乘,是因为绝大多数ServerApplication采用拼凑SQL语句的方式来构建应用程序(阅读这个帖子的诸位,你们回首想想自己的项目,有几个不是通过拼凑SQL语句的方式来操作数据库?想想你们见过的被注入的案例,有几个不是采用的拼凑SQL语句的应用),所谓拼凑SQL语句,简单一点说就是:用连接字符串操作(ASP中的和PHP中的.)将SQL关键字和客户端提交的数据连接起来并发送给DBMS执行。这样做直接导致DBMS根本不知道你计

6、划(planto)做什么,而只知道你要(isto)做什么,不是吗,服务器端脚本总是将要执行的SQL语句构造好,然后发给数据库,DBMS根本不知道客户端数据替换了变量之后,这个语句的执行计划是否有变化。服务器端脚本总是粗暴的告诉DBMS:你只管这么做好了,别问我为什么。就像上面我提到的更新文章标题的例子,DBMS不知道你只想更新第1234篇文章的标题,它以为你就是要把所有的标题都变成这个,因为你的语句就是没有ents的东西,它本质上也是一种存储过程,一种系统预置(相对于用户自定义)的存储过程。  如果你没有条件用上存储过程(比如数据库不支持,MySQL,Acc12下一页>>

7、>>这篇文章来自..,。ess,SQLite等都不支持),那么就只能将SQLInjection扼杀在摇篮里了。解决方法,我也只简单的说一句:不要相信任何来自客户端的数据。这个客户端的数据,可以通过很多途径被提交,比如get,post,cookie,brodash;注意是校验,不是过滤。基本上,不管你多聪明多细心(哪怕像我一样,不许笑,不许笑,严肃点,严肃点,我们这儿讲SQLInjection呢)也无法穷举可能被用于SQLInjection的符号和关键字,也无法预知替换掉他们是否会有副作用,最好的办法是不去判断什么数据不符合条件

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。