[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)

);

  1. 数据操纵:
    • 插入一条模拟管理员数据:INSERT INTO users (username, password) VALUES (‘admin’, ‘123456’);
    • 精准查询:SELECT * FROM users WHERE username = ‘admin’;

Keep Coding, Keep Hacking. 💻🛡️