[Day 5] MySQL 核心复盘:从增删改查到 SQL 注入的底层思考
很多人觉得 SQL 只是简单的“增删改查”,但在安全工程师眼里,每一条 SQL 语句都是潜在的攻击面。
一、 数据库的“CRUD”与安全映射
在开发视角下,SQL 的四大金刚是 INSERT, DELETE, UPDATE, SELECT。
但在我的安全视角下,它们代表着不同的风险:
1. 查询 (SELECT) —— 信息泄露的源头
这是 Web 业务中最常用的语句,也是 SQL 注入 (SQLi) 的重灾区。
- 基础语法: SELECT * FROM users WHERE id = 1;
- 安全思考: 如果开发者没有过滤 id 的输入,攻击者通过闭合单引号 ‘,配合 UNION SELECT,就能直接把数据库“拖库”。
- 关键点: 理解 ORDER BY 猜解字段数,理解 UNION 联合查询的逻辑。
2. 新增 (INSERT) —— 存储型攻击的温床
- 基础语法: INSERT INTO messages (content) VALUES (‘Hello’);
- 安全思考: 如果在这里插入了一段恶意的 XSS 代码(如 <script>alert(1)</script>),那么所有查看这条留言的用户都会中招。这就是存储型 XSS。
3. 修改 (UPDATE) & 删除 (DELETE) —— 破坏性攻击
- 基础语法: UPDATE users SET password=’123′ WHERE user=’admin’;
- 安全思考: 这类语句如果没有加上 WHERE 限制,或者存在越权漏洞 (IDOR),可能导致全站数据被篡改或清空。
二、 实战演练:命令行下的数据掌控
拒绝图形化工具的“傻瓜式操作”,回归命令行(CLI)才是理解数据库的最佳方式。
今日实战记录:
环境: 本地 MySQL 5.7 / 8.0 环境。建库建表:
CREATE DATABASE security_test;
USE security_test;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)
);
- 数据操纵:
- 插入一条模拟管理员数据:INSERT INTO users (username, password) VALUES (‘admin’, ‘123456’);
- 精准查询:SELECT * FROM users WHERE username = ‘admin’;
Keep Coding, Keep Hacking. 💻🛡️