【 3-2 】
软件系统安全开发体系
第3.2章 软件系统安全开发体系
本章内容依据《数据安全工程技术人员(初级)第3模块零基础详细学习教材》整理,系统讲解软件系统安全开发体系。
2.1 安全开发生命周期
软件安全开发要求在立项、需求、设计、编码、测试、上线、运行和退役各阶段加入安全活动。每一项安全需求都应能够追溯到设计、代码、测试结果和运行记录。
| 阶段 | 基础安全活动 | 初级人员可参与的工作 |
|---|---|---|
| 立项与需求 | 识别数据、用途、角色、接口和风险 | 整理数据处理清单和访谈记录 |
| 设计 | 设计认证、权限、加密、日志、备份和异常处理 | 绘制数据流和编制权限矩阵 |
| 编码 | 输入校验、权限判断和敏感数据保护 | 使用检查表,协助代码审查记录 |
| 测试 | 验证功能、权限、日志、脱敏和恢复 | 执行用例并登记缺陷 |
| 上线 | 审批、配置核验、回退准备和验证 | 核对版本、参数、账号和文档 |
| 运行 | 监控、补丁、备份、权限复核 | 巡检、告警记录和变更跟踪 |
| 退役 | 迁移、归档、删除和介质处置 | 维护退役清单和销毁记录 |
2.2 安全需求如何写
一条可执行的安全需求应明确对象、主体、条件、动作、结果和记录。模糊表述无法直接测试。
| 模糊表述 | 可执行需求 |
|---|---|
| 保护客户数据 | 普通客服查询客户资料时,手机号仅显示前三位和后四位;完整号码查看需要审批并记录日志。 |
| 接口要安全 | 所有接口使用加密传输;调用方使用可轮换令牌鉴权;连续失败达到阈值后触发告警。 |
| 做好日志 | 登录、查询、导出、修改、删除和授权记录账号、时间、对象、来源和结果。 |
| 备份要可靠 | 用户数据库每日备份,备份加密保存;每季度恢复抽测并记录结果。 |
2.3 安全需求清单示例
| 编号 | 对象 | 需求 | 验证方式 |
|---|---|---|---|
| SR-01 | 管理后台 | 管理账号启用多因素认证 | 登录时确认需要第二认证因素 |
| SR-02 | 客户手机号 | 普通客服仅查看脱敏值 | 使用客服角色查询页面和接口 |
| SR-03 | 数据导出 | 全量导出需要审批并记录日志 | 普通账号尝试导出,审批后复测 |
| SR-04 | API | 无效令牌调用时拒绝访问 | 使用无效、过期和缺失令牌调用 |
| SR-05 | 备份 | 备份可在规定时间内恢复 | 恢复测试并核对完整性 |
2.4 六项安全设计原则
| 原则 | 含义 | 例子 |
|---|---|---|
| 最小权限 | 只授予所需的数据、功能和时间 | 客服不能删除数据库表 |
| 默认安全 | 未明确授权时默认拒绝 | 新角色初始无导出权限 |
| 职责分离 | 审批、操作和审计由不同角色承担 | 管理员不能审批自己的高权限 |
| 纵深防御 | 多个层次共同保护 | 网络限制 + 认证 + 字段权限 + 审计 |
| 安全可用 | 控制与业务流程协调 | 高风险操作增加审批 |
| 可审计 | 关键活动有完整日志 | 记录账号、时间、对象、来源和结果 |
2.5 输入校验与输出处理
- 限制字段长度、数据类型、允许字符和必填条件。
- 使用参数化查询等安全方式访问数据库。
- 限制上传文件类型、大小和存储位置。
- 错误信息不直接显示数据库结构、文件路径、密钥或调用堆栈。
- 接口返回字段按业务需要设置白名单。
- 日志中避免记录明文口令、完整令牌和完整敏感字段。
2.6 开发环境管理
| 环境 | 用途 | 数据要求 | 主要控制 |
|---|---|---|---|
| 开发 | 编码与单元验证 | 模拟或脱敏数据 | 仓库权限、依赖管理、密钥隔离 |
| 测试 | 集成和功能测试 | 脱敏数据、最小数据集 | 测试账号、日志隔离、任务后清理 |
| 预生产 | 上线前验证 | 受控或仿真数据 | 审批、配置比对、回退验证 |
| 生产 | 真实业务运行 | 真实业务数据 | 严格权限、审计、备份、监控和变更 |
敏感配置:生产密钥、证书私钥、数据库口令和访问令牌不应存放在公共代码仓库、个人聊天工具或普通文档中。
2.7 代码与依赖组件管理
- 使用组织批准的代码仓库和实名账号。
- 提交前检查口令、密钥、令牌和真实数据。
- 记录第三方组件名称、版本、来源和许可证。
- 按评估、测试、审批和回退流程升级组件。
- 代码审查关注权限判断、敏感信息、错误处理和日志。
- 构建发布使用受控账号,限制修改发布包的人员。
本节自测
1. 什么样的安全需求具备可测试性?
2. 默认安全原则在新建角色时如何体现?
3. 为什么测试环境应限制使用真实生产数据?