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

order by排序猜解列数原理详解

  • 一、order by的两种使用方式
    • 1)按照字段名排序
    • 2)按照索引排序
  • 二、order by怎么判断字段数?
    • 1)正常的排序
    • 3)错误的排序

使用 「联合注入」(SQL注入漏洞的利用方式之一)进行脱库的时候,需要判断页面显示的 「字段」数量,也就是返回的查询结果包含几个字段,最常用的一种判断方式就是利用 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。

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

  1. 若依ajax返回数据,若依管理系统RuoYi-Vue(二):权限系统设计详解

    若依Vue系统中的权限管理部分的功能都集中在了系统管理菜单模块中,如下图所示.其中权限部分主要涉及到了用户管理.角色管理.菜单管理.部门管理这四个部分. 一.若依Vue系统中的权限分类 根据观察,若依 ...

  2. c if 判断select已经选择的值_「Linux」——select和epoll详解

    select和epoll详解 select和epoll的区别(面试常考) select 一.什么是select 1.select函数原型 2.参数解释 3.参数timeout取值 4.返回值 5.监控 ...

  3. MySQL千万数据调研,order by 原理详解

    大家好,我是Leo. 之前聊的RocketMQ暂时放放,目前正在调研一个千万数据的处理方案. 在做数据库结构优化时,遇到了 order by 调优点的问题.苦思冥想!觉得不了解 order by 的原 ...

  4. CSA实现单点登录原理详解 ,如何判断访问不同域名时用户是否登录

    原理图 www.cas.client.com为cas客户端,也就是用户要访问的资源所在,www.cas.server.com为cas服务端,是单点登录的认证中心. 图中各步骤拆解说明: ①:首先用户访 ...

  5. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  6. MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据

    本文是对之前学习 MySQL 的一个总结,使用思维导图的方式将涉及到的知识点罗列出来,一方面作为自己对于知识点的归纳,另一方面也便于日后查询. 在该篇文章中将对 MySQL 的基本使用.检索基本数据. ...

  7. numpy np.sort()函数(指定对某一轴进行排序,返回数组的排序副本)(成对数组不要用这个排,用哪个啥lexsort()或argsort()都行)

    指定对哪一层进行排序,如果需排序的是多维数组,特别是那种np.sort()貌似不太友好 from numpy\core\fromnumeric.py @array_function_dispatch( ...

  8. c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用

    在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...

  9. Mysql高手系列 - 第8篇:详解排序和分页(order by limit),及存在的坑

    这是Mysql系列第8篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符号分开的表示可选其一. 本章内容 详解排序查询 详解limit limit存在的坑 分 ...

最新文章

  1. 【电商日志项目之七】项目调优
  2. 黑马Go语言与区块链学习笔记
  3. ImportError: libSM.so.6: cannot open shared object file: No such file or dir
  4. mysql load data infile 重写_mysql load data infile 命令的数据导入
  5. AC自动机 - 关于Fail指针
  6. 实验一 DOS命令解释程序的编写
  7. [翻译]XNA 3.0 Game Programming Recipes之forty-seven
  8. spoj 2798 Query on a tree again! 树链剖分
  9. 最小生成树算法(Prim和Kruskal)
  10. 批量导入手机通讯录_怎么批量导出联系人通讯录,华为手机通讯录转移如何操作?...
  11. 韩顺平零基础循序渐进学Java——自学笔记
  12. unity lookat导致物体颠倒怎么解决_在Unity 2D中如何用一行代码实现LookAt的效果,以及向量归一化小总结...
  13. 网页里如何嵌入服务器控制,在嵌入式设备中实现Web动态服务与Web控制的实现思路...
  14. Javascript中的原型链,__proto__和prototype等问题总结
  15. html pdf 模板,记一次 HTML 模板 转 PDF
  16. 后台管理系统项目-登录页-实现步骤
  17. sklearn聚类之OPTICS算法
  18. 《JavaScript 的诞生》
  19. 游戏设计的艺术:一本透镜的书——第二十五章 好的游戏是通过游戏测试做出来的
  20. 云游武夷,智慧文旅促进旅游业发展

热门文章

  1. PHP框架自动加载类文件原理
  2. Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6...
  3. 第二章 Mablab语言基础
  4. C++多重继承时调用相应的父类函数
  5. 301永久重定向实现方式及302重定向(侧重.htaccess)
  6. ASP.NET的权限问题
  7. 利用VmWare_在本地内网IP地址段_搭建Centos7测试MyCat集群_亲测---Linux工作笔记044
  8. C++_-数据类型-字符型_转义字符_字符串类型--C++语言工作笔记012
  9. 大数据之-Hadoop之HDFS的API操作_文件夹_以及文件删除案例---大数据之hadoop工作笔记0059
  10. 大数据_MapperReduce_Hbase_批处理batchMutate源码分析_数据的写入流程源码分析---Hbase工作笔记0032