学 SQL 注入之前,必须先搞懂 WHERE、ORDER BY 和 LIMIT 最近开始学习 SQL 注入。结果发现一个很有意思的事情。很多人在学习 SQL 注入的时候。上来就研究联合查询报错注入盲注各种技巧但数据库最基础的几个语句WHEREORDER BYLIMIT反而没真正理解。而这些东西恰恰是后面学习 SQL 注入时最常遇到的内容。今天就结合自己的学习过程聊聊我最近刚弄明白的几个SQL 基础语句。一、为什么先学 SQL 而不是直接学注入刚开始接触 SQL 注入的时候我一直有个疑问为什么网上教程总在讲查询语句后来才发现SQL 注入本质上并不是一种独立语言。它本质上还是SQL语句如果连 SQL 在干什么都不知道后面看到各种内容基本只能死记硬背。先回忆一下什么是数据库二、WHERE 到底是什么我第一次看到 WHERE 的时候感觉特别像筛选器。例如有这样一张用户表idusernamepassword1admin1234562testabc1233useruser888如果执行SELECT * FROM users;结果会返回全部用户但如果加上SELECT * FROM usersWHERE usernameadmin;意思就变成只找用户名是 admin 的记录所以我现在的理解是WHERE 查询条件数据库根据条件筛选数据。三、登录功能其实就是一个 WHERE这一点是我最近最大的收获之一以前总觉得登录功能特别复杂后来发现数据库角度看其实很简单。用户输入用户名admin密码123456服务器可能会执行SELECT *FROM users WHERE usernameadmin AND password123456;如果查到了记录说明账号密码正确。如果没有查到说明登录失败。看到这里的时候。我突然意识到登录本质上也是数据库查询四、AND 和 OR 是什么它们其实就是逻辑关系。例如SELECT *FROM users WHERE usernameadmin AND password123456;意思两个条件同时满足再例如SELECT *FROM users WHERE usernameadmin OR usernametest;意思满足任意一个条件即可学到这里的时候。我开始理解数据库其实和程序里的逻辑判断很像只是换了一种写法。五、ORDER BY 是什么有一天我突然想到如果数据库里有几万条数据它们是按照什么顺序显示的后来学到 ORDER BY就是排序。例如SELECT * FROM users ORDER BY id;按照 id 从小到大排序。如果SELECT * FROM users ORDER BY id DESC;则是从大到小排序所以ORDER BY 排序这个理解就够了。六、LIMIT 是什么LIMIT 可以理解成限制返回数量例如SELECT *FROM users LIMIT 5;意思只返回前5条数据很多网站分页都会用到。比如第一页LIMIT 0,10第二页LIMIT 10,10第三页LIMIT 20,10这样数据库就不会一次返回全部数据效率也会更高。七、为什么这些东西和 SQL 注入有关后面很多 SQL 注入知识其实都建立在这些基础语句之上。例如为什么要判断字段数为什么会出现排序判断为什么经常看到 ORDER BY为什么要理解查询结构因为攻击者本质上是在研究数据库原本会执行什么只有理解 SQL才能理解后面的原理。八、我现在对 SQL 注入的理解变了以前我觉得SQL 注入就是各种奇怪技巧。现在越来越觉得SQL 注入其实是在研究整个过程而 WHERE、ORDER BY、LIMIT就是这个过程里最基础的组成部分。九、我的下一步学习计划接下来准备继续学习UNION聚合函数COUNT()GROUP BYSQL 查询结构等这些内容理解之后再进入真正的 SQL 注入原理这样会比直接背各种技巧轻松很多。十、最后刚开始学习 SQL 注入的时候我总觉得自己在学漏洞。但现在越来越感觉自己其实是在学习数据库如何工作而 SQL 注入只是建立在数据库和 SQL 语句之上的一种安全问题。所以对于新手来说先搞懂 WHERE、ORDER BY 和 LIMIT往往比急着学习各种注入技巧更重要。因为只有理解了 SQL后面的 SQL 注入才能真正看懂。