使用order by排序判断返回结果的列数,order by排序判断字段数原理详解

举报
士别三日wyx 发表于 2021/12/23 01:25:27 2021/12/23
【摘要】 「作者主页」:士别三日wyx order by排序猜解列数原理详解 一、order by的两种使用方式1)按照字段名排序2)按照索引排序 二、order by怎么判断字段数?1)正...

「作者主页」:士别三日wyx


「联合注入」 「字段」 order by

一、order by的两种使用方式

首先,我们准备一个「用户表」,表的内容如下
在这里插入图片描述

1)按照字段名排序

order by 排序可以按照指定的「字段名」排序,我们可以指定 username 字段,让查询结果按照用户名进行排序
在这里插入图片描述
我们可以看到,查询结果按照字段名降序。我们可以指定任意一个「存在」的字段进行排序

2)按照索引排序

除了字段名之外, order by 还可以按照「索引」进行排序,索引就是从左至右将列名按照123排序。我们还是指定 username 字段,让查询结果按照用户名进行排序, username 是查询结果中左边第一个字段,所以对应的索引是 1
在这里插入图片描述
我们可以看到,按照索引排序,查询的结果同字段名排序时一样的

二、order by怎么判断字段数?

原理很简单,就是利用数据库的「报错」机制。

1)正常的排序

首先我们来模拟一下正常的「登录」登录功能的查询语句,根据用户名和密码查询用户的信息
在这里插入图片描述
我们可以看到,查询结果有两列,接下来我们使用 order by 对查询结果进行排序,首先根据「第一列」也就是 username 进行排序
在这里插入图片描述
结果没有变化,这很正常,因为查询结果只有一条数据,再怎么排序也不会发生变化。接下来再根据「第二列」也就是 password 进行排序
在这里插入图片描述
还是没有变化,这很正常。

3)错误的排序

上面返回的查询结果中有两个字段,也就是两列数据,所以我们根据第一列和第二列进行排序都可以正常执行,但如果我们根据「第三列」进行排序呢?
在这里插入图片描述
我们可以看到,数据库报错了,意思是说不认识第三列,这很正常,查询结果总共就只有两列,如果排序的列数大于两列,自然会失败。利用排序的这一特性,我们可以从第一列开始排序,而后依次按照第二列,第三列…等进行排序,哪一列开始报错,就说明字段数是 「报错列数-1」,比如第三列排序时报错,字段数就是2。

文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wangyuxiang946/article/details/121058067

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。