文章目录
前言
MyBatis-Plus 提供了数据安全保护功能,旨在防止因开发人员流动而导致的敏感信息泄露。从3.3.2
版本开始,MyBatis-Plus 支持通过加密配置和数据安全措施来增强数据库的安全性。
一、配置安全
1. YML 配置加密
MyBatis-Plus 允许你使用加密后的字符串来配置数据库连接信息。在 YML 配置文件中,以 mpw:
开头的配置项将被视为加密内容。
spring:
datasource:
url: mpw:qRhvCwF4GOqjessEB3G+a5okP+uXXr96wcucn2Pev6Bf1oEMZ1gVpPPhdDmjQqoM
password: mpw:Hzy5iliJbwDHhjLs1L0j6w==
username: mpw:Xb+EgsyuYRXw7U7sBJjBpA==
2. 密钥加密
使用 AES 算法生成随机密钥,并对敏感数据进行加密。
// 生成16位随机AES密钥
String randomKey = AES.generateRandomKey();
// 使用随机密钥加密数据
String encryptedData = AES.encrypt(data, randomKey);
3. 如何使用
在启动应用程序时,通过命令行参数或环境变量传递密钥。
// Jar 启动参数示例(在IDEA中设置Program arguments,或在服务器上设置为启动环境变量)
--mpw.key=d1104d7c3b616f0b
注意
加密配置必须以mpw:
字符串开头。
随机密钥应由负责人妥善保管,知晓的人越少越好。
4. 数据安全
MyBatis-Plus 提供了字段加密解密和字段脱敏功能,以保护存储在数据库中的敏感数据。
- 字段加密解密:对数据库中的特定字段进行加密存储,并在需要时解密使用。
- 字段脱敏:对敏感字段进行脱敏处理,以隐藏或模糊敏感信息。
二、SQL 注入安全保护
MyBatis-Plus 提供了自动和手动两种方式来检查 SQL 注入风险。
1.自动检查
使用 Wrappers.query()
方法时,可以通过 .checkSqlInjection()
开启自动检查。
Wrappers.query()
// 开启自动检查 SQL 注入
.checkSqlInjection().orderByDesc("任意前端传入字段")
2. 手动校验
使用 SqlInjectionUtils.check()
方法进行手动校验。
// 手动校验前端传入的字段是否存在 SQL 注入风险
SqlInjectionUtils.check("任意前端传入字段")//@return true 非法 false 合法
三、实战
1. 配置加密
package org.example.springboot3.mybatisplus;
import com.baomidou.mybatisplus.core.toolkit.AES;
/**
* Create by zjg on 2024/7/6
*/
public class SecureTest {
public static void main(String[] args) {
encrypt(args);
}
public static void encrypt(String[] args){
if(args.length<1){
System.err.println("缺少必要的参数");
return;
}
// 生成16位随机AES密钥
String randomKey = AES.generateRandomKey();
System.out.println("--mpw.key="+randomKey);
// 使用随机密钥加密数据
String url = AES.encrypt(args[0], randomKey);
String user = AES.encrypt(args[1], randomKey);
String password = AES.encrypt(args[2], randomKey);
System.out.println("mpw:"+url);
System.out.println("mpw:"+user);
System.out.println("mpw:"+password);
}
public static void decrypt(){
String str = AES.decrypt("data", "key");
System.out.println(str);
}
}
在
Program arguments
中输入配置信息,空格作为分隔符
2. 修改配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: mpw:a7qfNhof3QWE/ZG9kXsRp3OAmvTKUtEoplWqG8Kv6HnIx/AtbvKWV9xHyF2RRVBjU/rNHNxD5coPsZAW1jOH4SvjtpDrOxrRd/b9Oxbouru2SQexExI8wi+txRXcl0q2IvdStkAioc5h2BJy0mpN2WAoLC3QTB8LrRSAY5bWNS9srDQiR1PEUapM7Rqa99wc
username: mpw:Pf7a3NpWt1WaqGExQCK5JA==
password: mpw:zbvqB2O0M7IzVPkVAPDd8A==
3. 启动参数
// Jar 启动参数示例(在IDEA中设置Program arguments,或在服务器上设置为启动环境变量)
--mpw.key=PPrnjeqDwk2zBwHj
4. 启动
P6Spy打印sql语句,程序正常启动,配置加密成功。
总结
通过上述措施,MyBatis-Plus 帮助你构建了一个更加安全的数据库环境,保护了敏感数据不被泄露。