当前位置: 首页 > news >正文

从零学网络安全 - 数据库安全与 SQL 注入(一)数据库基础

一、数据库基础概念

1. 什么是数据库

数据库是⻓期存储在计算机内、有组织、可共享的数据集合,解决海量数据管理问题。

2. 数据库管理系统(DBMS)

DBMS(Database Management System,数据库管理系统) 就是一个专门用来管理数据库的软件,你可以把它理解成数据库的 “管家”,它帮你处理所有和数据库相关的操作。

3. 三种常见的数据库

  1. Oracle:功能强、收费,银⾏/电信常⽤。
  2. SQL Server:适配 Windows,政府单位常⽤。
  3. MySQL(重点):开源免费、轻巧,校园系统/⽹站主流。

4. 数据库层次结构

数据库服务器 → 数据库(Database) → 数据表(Table) → 行(记录) → 列(字段)

二、数据的 CRUD(增删改查)

1. 命令行连接数据库

mysql -u root -p

● -u:指定⽤户名。
● -p:需要输⼊密码(输⼊时不显示,属正常现象)。

2. 数据库与表的创建

创建 school 数据库

-- 创建school数据库,指定字符集和排序规则
CREATE DATABASE school CHARACTER SET utf8 COLLATE utf8_general_ci;
  • --:SQL注释符,后续内容不执⾏。
  • CHARACTER SET:指定字符集。
  • COLLATE:指定排序规则。

创建 users 学⽣表

USE school;
-- 创建school表(匹配你的表结构)
CREATE TABLE users (id INT(11) PRIMARY KEY, -- 主键,学号(唯⼀标识,防⽌重复)name VARCHAR(50) NOT NULL, -- 姓名,⾮空(避免⽆效数据)id_card VARCHAR(18) NOT NULL, -- 身份证号,⾮空(18位固定⻓度)phone VARCHAR(11) NOT NULL, -- ⼿机号,⾮空(11位固定⻓度)address TEXT, -- 地址,⻓度不固定password VARCHAR(255) NOT NULL -- 密码,⾮空(存加密后的⻓字符串)
);

3. SQL 介绍

SQL 是结构化查询语言。

  1. 数据定义语言(DDL):用于创建和修改数据库对象(如表和索引)的结构,如 CREATE、ALTER、DROP 等语句。
  2. 数据操纵语言(DML):用于对数据库中的数据进行新增、修改、删除等操作,如 INSERT、UPDATE、DELETE 等语句。
  3. 数据查询语言(DQL):用于对数据进行查询操作,如 SELECT 语句。
  4. 数据控制语言(DCL):用于控制用户对数据的访问权限,如 GRANT 和 REVOKE 语句。

4. SQL 核⼼操作:CRUD(增删改查)

1. C(Create):新增数据(INSERT INTO)

格式:

INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...);

示例:

-- 新增1条学⽣数据
INSERT INTO `school`.`users` (`id`, `name`, `id_card`, `phone`, `address`,`password`) VALUES (3, 'shiro', '123456789', '123456789', '中国', '123456');

2. U(Update):修改数据(UPDATE)

格式:

UPDATE 表名 SET 字段1=新值1,字段2=新值2,... [WHERE 条件];

示例:

-- 修改李四(id=2)的密码为 newpass789
UPDATE users SET password='newpass789' WHERE id=2;

3. D(Delete):删除数据(DELETE)

格式:

DELETE FROM 表名 [WHERE 条件];

示例:

-- 删除张三(id=1)的信息
DELETE FROM users WHERE id=1;

4. R(Read):查询数据(SELECT,攻击者偷数据核⼼)

1. 查询所有数据

格式:

SELECT(列名)FROM(表名);

示例:

-- 查询 users 表中所有学⽣数据
SELECT * FROM users;

2. 条件查询

格式:

SELECT(列名)FROM(表名)WHERE(条件);

示例:

-- 只查学号为1的学⽣姓名和密码
SELECT name,password FROM users WHERE id=1;

3. 多条件查询:AND 操作符

示例:

-- 查学号2且姓名为xiaolin的学⽣密码
SELECT name,password FROM users WHERE id=2 AND name='xiaolin';

4. 多条件查询:OR 操作符

示例:

-- 查学号2或3的学⽣信息
SELECT * FROM users WHERE id=2 OR id=3;

5. 模糊查询:LIKE + %

示例:

-- 查姓x的学⽣(%代表任意字符)
SELECT * FROM users WHERE name LIKE 'x%';

6. 排序查询:ORDER BY

示例:

-- 按学号升序查询学⽣姓名
SELECT name FROM users ORDER BY id;
-- 按姓名降序查询
SELECT name FROM users ORDER BY name DESC;

7. 限制查询:LIMIT

格式:

-- 写法1:2个参数(完整写法,推荐)
SELECT 字段1, 字段2 FROM 表名 WHERE 条件 LIMIT 偏移量, 取数条数;-- 写法2:1个参数(简化写法)
SELECT 字段1, 字段2 FROM 表名 WHERE 条件 LIMIT 取数条数;

8. 联合查询:UNION(SQL 注入核心)

格式:

SELECT 字段1, 字段2, ... FROM 表1 [WHERE 条件]
UNION
SELECT 字段1, 字段2, ... FROM 表2 [WHERE 条件];
  • UNION:合并结果并去重。
  • UNION ALL:保留重复数据。
  • 每个 SELECT 的字段数量必须完全相同。
  • 对应位置的字段类型要兼容。

三、SQL 注入漏洞(万能密码)核心原理

1. 简单举例

核⼼问题代码:

$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
  • 直接将⽤户输⼊的 $name / $pwd 拼接到SQL语句的单引号中执⾏。
  • 未检查/过滤特殊字符(如 ' 、 OR 、 # 等),也未做转义处理。
  • 系统默认⽤户输⼊“正常内容”,但攻击者可输⼊恶意字符篡改SQL逻辑。

攻击者输⼊123' or '1'='1这类特殊字符,实现3个关键操作:

  1. 闭合原有 SQL 语句的单引号,打破查询限制。
  2. 添加 '1'='1' 这类恒成⽴条件,让查询条件永远为真。
  3. 注释多余内容,避免 SQL 语法错误。

篡改后的 SQL 语句示例:

原正常 SQL:SELECT * FROM users WHERE name='admin' AND password='123';
篡改后 SQL:SELECT * FROM users WHERE name='admin' AND password='123' or '1'='1';

⽆论账号密码是否正确,数据库都会返回所有⽤户信息,代码判定“登录成功”,实现免密绕过,但是登录的是查询语句中查询的第⼀个⽤户。

http://www.jsqmd.com/news/359440/

相关文章:

  • 轻松绘制合同审批流程图画图操作便捷不费力超省事
  • PADS 扇孔设置 扇孔到BGA焊盘内部解决办法
  • AI智能体实际应用场景盘点:从自动化办公到复杂决策的智能体部署流程图
  • 省心绘制财务核算流程图零门槛操作画图超便捷高效
  • LLMs之DataPreparation:《Can LLMs Clean Up Your Mess? A Survey of Application-Ready Data Preparation wi
  • LLMs之RL之SAR:《Self-Aligned Reward: Towards Effective and Efficient Reasoners》翻译与解读
  • 省心设计装修平面布局图在线画图工具一键生成超好用
  • 大语言模型长上下文技术突破:如何处理超长文本的注意力机制与架构图解
  • BISHI24 谐距下标对
  • 固态硬盘“喊冤”:这锅我不背!——重装系统真的能把我搞趴下?
  • 高效制作会计账务处理流程图 新手画图零门槛超省心
  • 大数据架构中的数据集成:CDC技术深度解析
  • 深度解析SWIFT大额跨境转账:流程拆解与资金拆分的核心逻辑 - 指南
  • 腾讯云轻量服务器 + OpenClaw 部署全攻略:从购买到飞书接入
  • HiNeRV 隐式神经编码环境搭建
  • Avalonia
  • 哪些招聘软件平台效果好?最新招聘平台权威排行
  • 上海黄金回收真实探店:终于找到靠谱的上海附近回收黄金店
  • RIFE 插帧模型环境搭建
  • PostgreSQL 中 pg_wal 目录里的 .ready .done .history 文件的生命周期
  • 中国招聘行业20年演进白皮书——从信息展示到AI智能,易直聘引领第四代招聘革命
  • csc(0x0006.d75a14f4) higher than block scn(0x0000.00000000)--故障处理--obet
  • Docker 安装 OpenClaw 报错排查:如何解决Gateway auth is set to token, but no token is configured``Missing config
  • DCVC-RT 深度条件视频压缩环境搭建
  • 20260208
  • Docker 安装 OpenClaw 报错排查完全手册(续):如何解决pairing required,`EACCES: permission denied`Docker 拉取镜像提示 `denied
  • 股票融资融券交易时间限制一览与制度说明
  • ​ 云游戏画质与体验天花板:从RTX 4090到8ms延迟,定义“最好的云游戏平台”标准
  • 知云题库:保健按摩师高分攻略,为何他们刷题效率翻倍?
  • 三维扫描数据能直接用吗?3DeVOK Studio让数据处理效率提升300%!