仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1069|回复: 6
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之SQL查询了局集对注进的影响及使用

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。关于注进而言,毛病提醒是极为主要。所谓毛病提醒是指和准确页面分歧的了局反应,妙手是很器重这个一点的,这关于注进点的精准判别相当主要。本问会商下关于几类毛病和他发生的道理,但愿对读者有所匡助。毛病提醒次要有逻辑毛病和语法毛病和剧本运转毛病三类。
一:逻辑毛病
复杂的例子是1=11=2这两个,1=1与1=2页面分歧的道理是甚么?以$sql=“select*fromnewswhereid=$_GET[id]”为例。
select*fromnewswhereid=1and1=2发生的了局集为NULL,然后程序取值得时分,就会往出空值,没法显现。固然有的程序发明SQL实行了局集为空,就当即跳转,效果就不显鸟。值得注重的是,有的如OraclePostgresql的数据库在了局集为空情形下会再页面上体现字符型null字样,这算是个特性。假如利用or前提,好比
select*fromnewswhereid=1or1=1
和and1=2得了局恰好相反,他的了局集非常复杂。假如SQL语句云云,再加上程序是轮回读取了局集(一些编程上的成规)那末会掏出一切了局,了局大概运转很慢,在数据量伟大的oracle上简单呈现。这个例子会呈现甚么呢,一样平常程序掏出了局会合的第一条了局,那末极可能已不是id=1的那条旧事了,这就是由些小菜奇异偶然候or1=1页面会产生变更的缘故原由。
回根究竟,都是了局集分歧酿成的,天真把握是关头,这并不是纯真的履历成绩。
二:语法毛病
语法毛病时对照熟习的,好比关于SQLServer,PgSQL,Sybase的注进毛病提醒都很主要,由于使用它的特征来猎取信息很疾速。语法毛病酿成的了局多是SQL毛病而中止剧本实行,可是剧本或服务器设置屏障毛病的情形下,程序失掉持续实行,可是了局集不存在,连NULL都算不上,反应给打击者的极可能就是了局集为空的情形,实在这是剧本的处置了局。固然OraclePgSQL体现null。
三:运转毛病不必说了,典范的就是使用mysql注进benchmark让剧本运转超时失掉物理路径,和使用超时来取得分歧的表征举行盲注进。
四:逻辑毛病和语法毛病的分离。
当表征极不分明的时分,使用相似iff如许的函数举行准确与否的辨别偶然候会成拯救稻草。由于语法毛病和逻辑毛病的表征年夜多半情形城市有分歧。
iff(1=1,1,‘no’)这个会发生了局1注重是数字,而iff(1=2,1,‘no’)这个会发生‘no’是字符。那末
id=1and1=iff(1=1,1‘no’)准确是一定建立的,而id=1and1=iff(1=2,1,‘no’)会由于范例分歧产生语法毛病。不外惋惜的是仿佛撑持iff函数的数据库未几,呵呵。
如今讲了局集在注进中的使用道理。
一:从‘or’‘=’入手下手
这是进修SQL注进的低级课程,上岸毛病。我大略从SQL了局集上剖析。
$sql=“selecttop1*fromadminwhereusername=‘$username’andpassword=md5(‘$password’)”;
不言而喻,‘or’‘=’的到场使SQL语句前往了一笔记录,这才使考证经由过程。
二:再看如今的考证中的SQL
$sql=“selecttop1*fromadminwhereusername=‘$username’”;
了局集不为空才依据抽取的纪录会合的暗码值与用户提交的暗码MD5值举行比对来举行考证。如许,你俄然发明‘or’‘=’的计谋失利鸟,可是背景明显有注进,这就是考证办法酿成的。跟进这个考证历程,‘or’‘=’切实其实发生了一个了局集(admin表中的第一行纪录)可是遗憾的事,厥后的暗码比对没法经由过程,考证没法乐成。
思绪很复杂,网上有案例,我重在道理,使用union来发生想要的了局集。好比‘and(1=2)unionselecttop1username,’123456得md5值‘,idfromadminwhereusername=’admin
如许发生了admin的纪录信息,可是纪录会合的暗码谁人地位的值被交换成了123456的md5值,如许,利用admin123456经由过程考证而且承继他的权力。
更有甚者全体用‘xxx’的办法来盲狙,这就很“太过”鸟。不外在sql2000sybase这些严厉请求范例婚配的数据库来讲,如许不克不及撼动“办理员上岸”的,由于实行时产生了语法毛病,了局集为NULL。别的之前ewebeditor注进毛病来上传马也是这个union操纵了局集来到达目标的典范案例。
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。
再现理想 该用户已被删除
沙发
发表于 2015-1-19 06:28:38 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
admin 该用户已被删除
板凳
发表于 2015-1-27 11:58:54 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
只想知道 该用户已被删除
地板
发表于 2015-2-5 09:44:15 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
柔情似水 该用户已被删除
5#
发表于 2015-3-2 06:46:50 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
山那边是海 该用户已被删除
6#
发表于 2015-3-11 03:03:19 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
小妖女 该用户已被删除
7#
发表于 2015-3-17 19:38:49 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 12:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表