1. 概述
安全设计Checklist是在系统架构设计阶段使用的结构化审查工具。其目的是确保设计方案在进入编码阶段前已充分考虑安全因素, 避免因架构级缺陷导致后期高成本的返工。本Checklist覆盖认证、授权、输入验证、密码学、错误处理、日志审计和会话管理七个核心安全域。
使用方式
设计评审会议中, 安全评审员应逐项检查以下Checklist。每个检查项标记为"通过"、"不适用"或"需整改", 整改项需在编码开始前完成闭环。
2. 认证 (Authentication)
| 编号 | 检查项 | 说明 |
| AUTH-01 | 是否采用标准认证协议 | 优先使用 OAuth 2.0 / OpenID Connect, 避免自研认证协议 |
| AUTH-02 | 密码策略是否合理 | 最低长度8位, 支持 MFA, 禁止明文存储, 使用 bcrypt/scrypt/Argon2 |
| AUTH-03 | 是否支持多因素认证 | 高风险操作 (如支付、权限变更) 必须要求 MFA |
| AUTH-04 | 暴力破解防护 | 实现账户锁定策略或渐进式延迟, 配合 CAPTCHA |
| AUTH-05 | 凭据传输安全 | 认证凭据必须通过 TLS 加密信道传输, 禁止 URL 参数传递 |
| AUTH-06 | 密码重置流程安全 | 使用一次性 Token + 有效期限制, 重置后使旧会话失效 |
3. 授权 (Authorization)
| 编号 | 检查项 | 说明 |
| AUTHZ-01 | 是否实施最小权限原则 | 用户和服务账号仅授予完成其职能所需的最小权限集 |
| AUTHZ-02 | 访问控制模型是否明确 | 明确采用 RBAC、ABAC 或 PBAC, 并文档化权限矩阵 |
| AUTHZ-03 | 是否存在水平越权风险 | 用户不能访问同级别其他用户的资源, 需服务端校验资源归属 |
| AUTHZ-04 | 是否存在垂直越权风险 | 普通用户不能执行管理员操作, 接口层需独立校验角色 |
| AUTHZ-05 | API授权粒度 | 每个 API Endpoint 必须有独立的权限校验, 不依赖前端控制 |
4. 输入验证 (Input Validation)
| 编号 | 检查项 | 说明 |
| IV-01 | 是否在服务端执行输入验证 | 客户端验证仅用于用户体验, 安全验证必须在服务端实施 |
| IV-02 | 是否采用白名单验证策略 | 优先定义允许的输入模式, 而非尝试过滤恶意输入 |
| IV-03 | SQL注入防护 | 使用参数化查询 (Prepared Statement), 禁止字符串拼接SQL |
| IV-04 | XSS防护 | 输出编码 (Output Encoding) 与 Content Security Policy 结合使用 |
| IV-05 | 文件上传安全 | 校验文件类型 (Magic Number, 非仅扩展名)、大小限制、存储隔离 |
| IV-06 | 反序列化安全 | 避免对不可信数据进行反序列化, 若必须则使用白名单类过滤 |
5. 密码学 (Cryptography)
| 编号 | 检查项 | 说明 |
| CRYPTO-01 | 是否使用标准加密算法 | 对称: AES-256-GCM; 非对称: RSA-2048+/ECDSA P-256+; 散列: SHA-256+ |
| CRYPTO-02 | 密钥管理方案 | 使用 KMS (如 AWS KMS, HashiCorp Vault), 禁止硬编码密钥 |
| CRYPTO-03 | TLS配置 | 最低 TLS 1.2, 推荐 TLS 1.3, 禁用不安全的密码套件 |
| CRYPTO-04 | 敏感数据存储加密 | PII、支付信息等敏感数据必须加密存储, 区分 Encryption at Rest 和 In Transit |
| CRYPTO-05 | 随机数生成 | 安全相关场景必须使用 CSPRNG (如 SecureRandom), 禁止使用 Math.random() |
6. 错误处理 (Error Handling)
| 编号 | 检查项 | 说明 |
| ERR-01 | 错误信息是否安全 | 面向用户的错误信息不应泄露技术细节 (如堆栈跟踪、SQL语句、内部路径) |
| ERR-02 | 全局异常处理 | 实现全局异常处理器, 确保未捕获异常不会返回原始错误信息 |
| ERR-03 | 失败安全 (Fail Secure) | 系统异常时默认拒绝访问, 而非默认允许 |
| ERR-04 | 错误日志分离 | 详细错误信息写入安全日志 (仅运维可访问), 用户仅看到友好提示 |
7. 日志与审计 (Logging & Auditing)
| 编号 | 检查项 | 说明 |
| LOG-01 | 安全事件是否记录 | 认证成功/失败、授权失败、输入验证失败、关键业务操作必须记录 |
| LOG-02 | 日志内容安全 | 日志中禁止记录密码、Token、信用卡号等敏感信息 |
| LOG-03 | 日志防篡改 | 日志应存储在独立系统中, 应用进程仅有追加权限 |
| LOG-04 | 日志保留策略 | 根据合规要求确定保留期限, 通常不少于6个月 |
8. 会话管理 (Session Management)
| 编号 | 检查项 | 说明 |
| SESS-01 | Session ID强度 | 使用足够长度 (128 bit+) 和熵的随机值, 由框架自动生成 |
| SESS-02 | 会话超时 | 设定合理的绝对超时和空闲超时, 高敏感操作使用短时会话 |
| SESS-03 | Cookie安全属性 | 设置 Secure、HttpOnly、SameSite 属性, 限定 Path 和 Domain |
| SESS-04 | 会话固定攻击防护 | 认证成功后必须重新生成 Session ID |
| SESS-05 | 并发会话控制 | 根据业务需求限制同一账户的并发会话数 |
注意
Checklist不能替代深入的威胁建模。对于复杂系统, 应在完成Checklist审查后, 进一步执行结构化的威胁建模分析 (参见"威胁建模"章节)。
李
李明 (Li Ming)
Security Architecture Reviewer
资深安全架构评审专家, 专注于安全设计评审方法论研究。曾参与多个金融和政务系统的安全架构评审, 在安全设计模式和反模式方面有深入的实践积累。