# 安全规范
规范开发和运维过程中的安全要求,确保系统安全
# 一、安全设计原则
# 最小权限原则
- 用户只拥有完成工作所需的最小权限
- 系统组件只拥有运行所需的最小权限
- 默认拒绝,按需授权
# 纵深防御原则
- 多层安全防护,不依赖单一安全措施
- 即使一层被突破,还有其他层防护
- 网络层、应用层、数据层都要有安全防护
# 安全默认原则
- 默认配置应该是安全的
- 用户需要主动关闭安全功能,而不是开启
- 新功能上线前必须通过安全评估
# 二、代码安全
# SQL 注入防护
// ❌ 错误示例 - 字符串拼接 SQL
var sql = $"SELECT * FROM Users WHERE UserName = '{userName}'";
// ✅ 正确示例 - 参数化查询
var sql = "SELECT * FROM Users WHERE UserName = @userName";
var parameters = new { userName };
1
2
3
4
5
6
2
3
4
5
6
# XSS 防护
// ❌ 错误示例 - 直接输出用户输入
@Html.Raw(userInput)
// ✅ 正确示例 - HTML 编码后输出
@Html.Encode(userInput)
1
2
3
4
5
2
3
4
5
# 输入验证
// ✅ 白名单验证
if (!Regex.IsMatch(input, @"^[a-zA-Z0-9]+$"))
{
throw new ArgumentException("输入包含非法字符");
}
// ✅ 长度限制
if (input.Length > 100)
{
throw new ArgumentException("输入超过最大长度");
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 密码安全
// ✅ 使用 BCrypt 或 PBKDF2 等加密密码
var hashedPassword = BCrypt.Net.BCrypt.HashPassword(plainPassword);
// ✅ 验证密码
var isValid = BCrypt.Net.BCrypt.Verify(plainPassword, hashedPassword);
1
2
3
4
5
6
2
3
4
5
6
# 三、认证授权
# 认证要求
- 密码长度至少 8 位,包含大小写字母、数字、特殊字符
- 条件容许下使用支持多因素认证(MFA)
- 登录失败 5 次后锁定账号 30 分钟
- Session 超时时间不超过 2 小时
# 授权要求
- 基于角色的访问控制(RBAC)
- 接口级别权限验证
- 数据级别权限验证(行级权限、列级权限)
- 权限变更即时生效
# Token 安全
// ✅ JWT Token 配置
var tokenOptions = new JwtOptions
{
Secret = "足够长的随机密钥", // 至少 32 字符
Expires = TimeSpan.FromHours(2),
Issuer = "darkm.woowis.com",
Audience = "darkm-client"
};
// ✅ Token 刷新机制
// Access Token 有效期 2 小时
// Refresh Token 有效期 7 天
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 四、数据安全
# 敏感数据加密
| 数据类型 | 加密方式 | 说明 |
|---|---|---|
| 密码 | BCrypt/PBKDF2 | 不可逆加密 |
| 身份证号 | AES-256 | 可逆加密 |
| 手机号 | AES-256 | 可逆加密 |
| 银行卡号 | AES-256 | 可逆加密 |
# 数据传输安全
- ✅ 全站 HTTPS
- ✅ TLS 1.2+
- ✅ 禁用弱加密套件
- ✅ 启用 HSTS
# 数据备份
- 数据库每日自动备份
- 备份数据异地存储
- 定期恢复演练(每季度至少 1 次)
# 五、部署安全
# 服务器加固
- 关闭不必要的端口和服务
- 定期更新系统补丁
- 配置防火墙规则
- 禁用 root 远程登录
- 使用 SSH 密钥认证
# 应用配置
- 生产环境禁用调试模式
- 敏感配置信息使用密钥管理服务
- 不要将密钥、密码硬编码在代码中
- 使用环境变量管理配置
# 访问控制
- 管理后台限制 IP 访问
- 数据库禁止公网访问
- 使用堡垒机访问生产环境
- 操作日志完整记录
# 六、安全测试
# 代码扫描
- 使用 SonarQube 进行静态代码分析
- 每周自动扫描
- 严重安全问题必须修复才能上线
# 渗透测试
- 每年至少做一次全面渗透测试
- 重大版本上线前做安全测试
- 可聘请第三方安全公司进行
# 漏洞扫描
- 每月扫描系统漏洞
- 及时修复高危漏洞
- 关注 CVE 安全公告
# 七、安全监控
# 监控指标
- 异常登录(异地登录、频繁登录失败)
- 异常操作(批量导出数据、权限变更)
- 系统异常(CPU/内存异常、错误日志激增)
# 告警机制
- 接入钉钉/企业微信告警
- P0 安全问题 15 分钟内响应
- 建立安全应急响应群
# 日志审计
- 登录日志完整记录
- 关键操作日志完整记录
- 日志保存至少 6 个月
- 日志定期审计
# 八、安全事件处理
# 事件分级
| 级别 | 说明 | 响应时间 |
|---|---|---|
| P0-严重 | 数据泄露、系统被入侵 | 15 分钟 |
| P1-高 | 发现高危漏洞 | 1 小时 |
| P2-中 | 发现中危漏洞 | 24 小时 |
| P3-低 | 发现低危漏洞 | 1 周 |
# 处理流程
事件发现 → 初步定级 → 应急响应 → 问题定位 → 修复验证 → 复盘总结
1
# 九、安全培训
- 新员工入职必须接受安全培训
- 每季度组织一次安全意识培训
- 定期分享安全案例和最佳实践