sql,1-4个人问题和知识点汇总
2026/9/9 7:05:23 网站建设 项目流程
  1. ?id ?是查询参数分隔符
    ?后端sql查询用来筛选记录的条件
    ?id=1是查询id=1的那行数
    结束都要写%23或者#,#以后的内容不执行

  2. sqlz注入漏洞的攻击的目标就是窃取数据

  3. 数据源来自系统表:information_schema.tables
    information_schema.tables 这张系统表里,有很多内置字段:
    table_name:表的名字
    table_schema:数据库库名
    我们现在的目标:找出 security 库里面所有的表叫什么
    所以取这张表的 table_name 字段,group_concat() 把多个表名拼接成一行输出到回显位。
    column_name:代表字段(列)的名字
    查库名:database() → 得到 security
    查表名:group_concat(table_name) → 得到 users 等表
    查字段名:group_concat(column_name) → 得到 username,password
    脱数据:直接查询 username,password,拿到账号密码
    group_concat(xxx),括号里面填什么,取决于你想要拿系统表里的哪一个字段。
    拿表名就填table_name;拿列名就填column_name。

  4. UNION 的作用:把两条 select 查询的结果合并到一起。
    所以UNION 后面必须再接一个完整的 SELECT
    第一条 select:正常查 users,id=-1 查不到任何东西
    第二条 select:我们自己写的查询,用来读系统库拿表名
    union 把两个查询结果合并,页面就显示第二条 select 的输出
    记住硬性规则:
    union 前后两个 select,返回的列数量必须一模一样。前面 3 列,后面 select 后面就要写 3 个东西。

  5. 为什么第一题单引号测试时候要用#,第四题双引号不用,而且双引号是直接报错才认为是有的
    ?(1)(存疑)与前面是同类符号才有可能跳出原来的语法,只有和容器一模一样的引号,才能打破字符串、产生报错,实现注入

(2)模拟 MySQL 一行一个字符读取解析 SQL:
读到 " → MySQL:开启字符串模式!接下来所有字符全部当成普通文本,直到再次遇到 "
读到 1 → 普通文本
读到你输入的 " → MySQL:找到结束引号!字符串到此终止,退出字符串模式!
继续向后读取,下一个字符:后端自带的 "
👉 现在状态:已经不在字符串里面了,突然单独出现一个游离的 "
MySQL 语法规则:单独放一个无配对的引号,属于非法语法 → 抛出报错!

url就是网页地址,记录访问的服务器位置、资源路径
过滤就是后端程序员把输入语句拼金sql语句前,先检查并处理特殊字符,让他没法闭合原本字符串,
sql是结构化查询语言,专门用来做数据交互,后端就是用拼接好的sql语句区查询的
把查询逻辑插入执行语句,就拿到控制权,
怎么过过滤?
查字段原因

防护时候要把单引号转义成两个双引号,要么直接过滤掉这些胡改变sql结构的字符

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询