# 安全规范

规范开发和运维过程中的安全要求,确保系统安全

# 一、安全设计原则

# 最小权限原则

  • 用户只拥有完成工作所需的最小权限
  • 系统组件只拥有运行所需的最小权限
  • 默认拒绝,按需授权

# 纵深防御原则

  • 多层安全防护,不依赖单一安全措施
  • 即使一层被突破,还有其他层防护
  • 网络层、应用层、数据层都要有安全防护

# 安全默认原则

  • 默认配置应该是安全的
  • 用户需要主动关闭安全功能,而不是开启
  • 新功能上线前必须通过安全评估

# 二、代码安全

# 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

# XSS 防护

// ❌ 错误示例 - 直接输出用户输入
@Html.Raw(userInput)

// ✅ 正确示例 - HTML 编码后输出
@Html.Encode(userInput)
1
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

# 密码安全

// ✅ 使用 BCrypt 或 PBKDF2 等加密密码
var hashedPassword = BCrypt.Net.BCrypt.HashPassword(plainPassword);

// ✅ 验证密码
var isValid = BCrypt.Net.BCrypt.Verify(plainPassword, hashedPassword);

1
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

# 四、数据安全

# 敏感数据加密

数据类型 加密方式 说明
密码 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

# 九、安全培训

  • 新员工入职必须接受安全培训
  • 每季度组织一次安全意识培训
  • 定期分享安全案例和最佳实践

# 相关文档