# SQL 注入防护

URL: https://caijiao.org/mariadb/security/hardening/sql-injection
Source: docs/mariadb/security/hardening/sql-injection.md
Description: 本节介绍防止 SQL 注入攻击的常用方法，包括使用预处理语句、输入验证及最小权限原则，保障 MariaDB 数据库安全。

## 1. 什么是 SQL 注入

SQL 注入是黑客通过向应用程序输入恶意 SQL 代码，篡改数据库查询语句，从而非法访问或破坏数据库的攻击方式。

## 2. 预防措施

### 使用预处理语句（Prepared Statements）

预处理语句可以将 SQL 代码与数据分离，避免恶意代码执行。例如，使用参数化查询：

```sql
PREPARE stmt FROM 'SELECT * FROM users WHERE username = ? AND password = ?';
SET @u = 'user_input', @p = 'pass_input';
EXECUTE stmt USING @u, @p;
````

大多数编程语言的数据库接口都支持预处理语句。

### 输入验证和过滤

* 对用户输入严格验证和过滤，避免特殊字符影响 SQL 语句；
* 使用白名单限制输入内容格式。

### 最小权限原则

* 只赋予数据库用户必要的权限，限制对敏感数据和操作的访问。

## 3. 其他建议

* 定期更新数据库和应用程序；
* 监控异常查询和登录行为；
* 使用 Web 应用防火墙（WAF）增强安全。

---

通过多层次防护措施，有效抵御 SQL 注入攻击，保障 MariaDB 数据库和应用系统的安全。
