数据安全清单
文档编号: SYS-SEC-DATA-001
版本: 1.0
创建日期: 2026-03-08
作者: 安全架构师
状态: ✅ 已完成
1. 概述
1.1 目的
本文档定义System平台的数据安全要求,确保数据在传输、存储、处理过程中的安全性,防止数据泄露、篡改和丢失。
1.2 适用范围
- 用户数据(个人信息、账号信息)
- 业务数据(系统配置、操作日志)
- 敏感数据(密码、密钥、令牌)
- 备份数据(数据库备份、文件备份)
1.3 参考标准
- GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求
- GB/T 35273-2020 信息安全技术 个人信息安全规范
- OWASP Data Protection Cheat Sheet
2. 传输安全
2.1 TLS加密
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| TLS版本 | TLS 1.2或更高 | Web服务器配置 | 必须 |
| 证书有效性 | 使用有效证书 | 证书管理 | 必须 |
| 证书来源 | 使用可信CA签发 | 证书购买/申请 | 必须 |
| HSTS | 启用HTTP严格传输安全 | 响应头配置 | 建议 |
| 混合内容 | 禁止HTTP资源加载 | CSP策略 | 必须 |
Nginx TLS配置示例:
nginx
server {
listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000" always;
}2.2 API传输安全
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 敏感参数 | 禁止URL传递敏感信息 | POST请求体 | 必须 |
| 请求签名 | 重要接口请求签名 | HMAC-SHA256 | 建议 |
| 防重放 | 请求时间戳+随机数 | 请求参数 | 建议 |
| 响应加密 | 敏感数据响应加密 | AES加密 | 可选 |
3. 存储安全
3.1 密码存储
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 哈希算法 | bcrypt/Argon2 | Spring Security | 必须 |
| 工作因子 | bcrypt: 10-12 | 配置参数 | 必须 |
| 盐值 | 随机盐值 | bcrypt内置 | 必须 |
| 明文存储 | 禁止 | 代码审查 | 必须 |
3.2 敏感字段加密
| 字段类型 | 加密算法 | 密钥管理 | 优先级 |
|---|---|---|---|
| 身份证号 | AES-256-GCM | KMS管理 | 必须 |
| 手机号 | AES-256-GCM | KMS管理 | 必须 |
| 银行卡号 | AES-256-GCM | KMS管理 | 必须 |
| 邮箱地址 | AES-256-GCM | KMS管理 | 建议 |
| 地址信息 | AES-256-GCM | KMS管理 | 建议 |
MyBatis Plus加密示例:
java
@Component
public class SensitiveDataEncryptor implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 加密敏感字段
String idCard = (String) getFieldValByName("idCard", metaObject);
if (StrUtil.isNotBlank(idCard)) {
setFieldValByName("idCard", AESUtil.encrypt(idCard), metaObject);
}
}
}3.3 数据库安全
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 连接加密 | SSL/TLS连接 | JDBC配置 | 必须 |
| 账号权限 | 最小权限原则 | 数据库用户配置 | 必须 |
| 密码管理 | 定期更换密码 | 密码策略 | 必须 |
| 审计日志 | 启用数据库审计 | 数据库配置 | 建议 |
4. 数据脱敏
4.1 脱敏规则
| 数据类型 | 脱敏规则 | 示例 |
|---|---|---|
| 手机号 | 保留前3后4 | 138****8888 |
| 身份证号 | 保留前6后4 | 110101********1234 |
| 银行卡号 | 保留后4位 | **** **** **** 1234 |
| 邮箱 | 保留首字母和域名 | a***@example.com |
| 姓名 | 保留姓 | 张** |
| 地址 | 保留省市 | 北京市****** |
4.2 脱敏场景
| 场景 | 脱敏要求 | 实现方式 |
|---|---|---|
| 列表展示 | 默认脱敏 | 序列化注解 |
| 详情查看 | 有权限可查看原文 | 权限控制 |
| 数据导出 | 默认脱敏 | 导出处理 |
| 日志记录 | 必须脱敏 | 日志拦截器 |
| API响应 | 根据权限脱敏 | 响应处理器 |
脱敏注解示例:
java
public class UserVO {
@Sensitive(type = SensitiveType.MOBILE)
private String mobile;
@Sensitive(type = SensitiveType.ID_CARD)
private String idCard;
@Sensitive(type = SensitiveType.NAME)
private String realName;
}5. 数据备份
5.1 备份策略
| 备份类型 | 频率 | 保留周期 | 存储位置 |
|---|---|---|---|
| 全量备份 | 每周 | 4周 | 异地存储 |
| 增量备份 | 每天 | 7天 | 本地+异地 |
| 事务日志 | 实时 | 30天 | 本地 |
| 配置文件 | 变更时 | 10个版本 | 版本控制 |
5.2 备份安全
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 备份加密 | 备份文件加密存储 | AES加密 | 必须 |
| 传输加密 | 备份传输使用SFTP/SCP | SSH协议 | 必须 |
| 访问控制 | 备份存储访问控制 | 权限管理 | 必须 |
| 定期恢复测试 | 每季度恢复测试 | 测试环境 | 建议 |
5.3 备份脚本示例
bash
#!/bin/bash
# MySQL备份脚本
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="linsir_system"
# 执行备份
mysqldump -u backup -p$PASSWORD --single-transaction $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# 加密备份
openssl enc -aes-256-cbc -salt -in $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz -out $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz.enc -pass pass:$ENCRYPT_KEY
# 删除原文件
rm $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# 清理过期备份
find $BACKUP_DIR -name "*.enc" -mtime +30 -delete6. 数据访问控制
6.1 访问控制策略
| 控制点 | 要求 | 实现方式 |
|---|---|---|
| 身份认证 | 访问前必须认证 | JWT验证 |
| 权限校验 | 访问需授权 | RBAC模型 |
| 数据范围 | 只能访问授权数据 | 数据权限拦截 |
| 操作审计 | 记录所有访问 | 审计日志 |
6.2 数据导出控制
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 导出权限 | 需特定权限 | 权限校验 | 必须 |
| 导出审批 | 敏感数据导出需审批 | 工作流 | 建议 |
| 导出水印 | 添加用户标识水印 | PDF/Excel水印 | 建议 |
| 导出日志 | 记录导出操作 | 审计日志 | 必须 |
| 导出脱敏 | 敏感字段脱敏 | 导出处理 | 必须 |
7. 数据销毁
7.1 销毁策略
| 数据类型 | 销毁时机 | 销毁方式 |
|---|---|---|
| 用户注销数据 | 用户注销后30天 | 逻辑删除+物理删除 |
| 临时数据 | 过期后自动清理 | 定时任务删除 |
| 日志数据 | 保留期满后 | 归档后删除 |
| 备份数据 | 保留期满后 | 安全擦除 |
7.2 安全删除
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 逻辑删除 | 先标记删除状态 | deleted字段 | 必须 |
| 物理删除 | 定期清理逻辑删除数据 | 定时任务 | 必须 |
| 文件删除 | 安全擦除文件 | 覆写删除 | 建议 |
| 删除审计 | 记录删除操作 | 审计日志 | 必须 |
8. 密钥管理
8.1 密钥生命周期
| 阶段 | 要求 | 实现方式 |
|---|---|---|
| 生成 | 使用安全随机数生成 | SecureRandom |
| 存储 | 存储在KMS或安全密钥库 | HashiCorp Vault |
| 使用 | 内存中使用,不持久化 | 临时变量 |
| 轮换 | 定期轮换密钥 | 定时任务 |
| 销毁 | 安全销毁旧密钥 | 安全擦除 |
8.2 密钥分类
| 密钥类型 | 用途 | 存储位置 |
|---|---|---|
| 数据库加密密钥 | 敏感字段加密 | KMS |
| JWT签名密钥 | Token签名验证 | 配置文件+环境变量 |
| API签名密钥 | 接口签名验证 | 数据库 |
| 备份加密密钥 | 备份文件加密 | KMS |
9. 安全检查清单
9.1 开发阶段检查
- [ ] 敏感字段加密实现
- [ ] 数据脱敏注解实现
- [ ] 传输加密配置
- [ ] 密码哈希存储
- [ ] 数据权限拦截器
- [ ] 导出安全控制
9.2 测试阶段检查
- [ ] 传输层加密测试
- [ ] 存储加密测试
- [ ] 数据脱敏测试
- [ ] 备份恢复测试
- [ ] 密钥轮换测试
9.3 部署阶段检查
- [ ] TLS证书配置
- [ ] 数据库SSL连接
- [ ] 备份策略配置
- [ ] 密钥管理系统
- [ ] 数据审计日志
10. 合规要求
10.1 等保三级要求
| 控制点 | 要求 | 实现 |
|---|---|---|
| S3A4-数据完整性 | 防止数据篡改 | 数字签名/校验 |
| S3A5-数据保密性 | 加密存储和传输 | TLS + AES加密 |
| S3A5-备份恢复 | 数据备份和恢复 | 定期备份策略 |
10.2 个人信息保护
| 要求 | 实现 |
|---|---|
| 最小必要 | 只收集必要个人信息 |
| 加密存储 | 敏感个人信息加密 |
| 访问控制 | 严格的数据访问控制 |
| 删除权 | 支持用户删除个人信息 |
11. 评审记录
11.1 评审意见
| 序号 | 评审项 | 评审意见 | 评审结果 |
|---|---|---|---|
| 1 | 传输加密 | TLS 1.2+配置完善 | ✓ 通过 |
| 2 | 存储加密 | 敏感字段AES加密 | ✓ 通过 |
| 3 | 数据脱敏 | 脱敏规则覆盖全面 | ✓ 通过 |
| 4 | 备份策略 | 备份策略合理 | ✓ 通过 |
| 5 | 密钥管理 | KMS密钥管理 | ✓ 通过 |
| 6 | 等保合规 | 满足数据安全要求 | ✓ 通过 |
11.2 评审结论
评审结果: ✅ 通过
评审日期: 2026-03-08
评审人员:
- 安全专家: _________________ (签字) 2026-03-08
- 技术负责人: _________________ (签字) 2026-03-08
- 产品经理: _________________ (签字) 2026-03-08
12. 修订记录
| 版本 | 日期 | 作者 | 变更内容 |
|---|---|---|---|
| 1.0 | 2026-03-08 | 安全架构师 | 初始版本,定义数据安全清单 |
