【 第 2 步 】

软件开发室

师傅:“工厂准备给会员系统增加‘线上修改配送地址’功能。开发人员已经开始设计页面和接口,但安全不能等到上线前再补。今天我们进入安全开发生命周期,从立项和需求开始,把认证、权限、加密、日志、备份和异常处理逐步写进设计、编码、测试、上线、运行和退役各阶段。

每一条安全需求都要写得足够具体,说明保护对象、谁在什么条件下执行什么操作、系统应该怎样响应、最后留下什么记录。可以把安全开发理解成在盖房子时就把门锁和消防一起设计进去,而不是房子盖完以后再临时补。”

软件开发室情景阅读暂用场景图

01 · 现场对话

软件开发室的知识任务

01

需求阶段先问数据

新功能开始前先确认处理什么数据。

师傅

“修改配送地址需要哪些数据?”

开发人员

“会员账号、手机号、原地址和新地址。”

小白

“谁可以修改?”

开发人员

“会员本人。”

师傅

“很好。数据、角色和用途先写进需求。”

02

把模糊要求改具体

安全需求必须能够测试。

小白

“写‘保护会员资料’可以吗?”

师傅

“太模糊。”

小白

“那怎么写?”

师傅

“例如:会员登录后只能修改自己的配送地址,修改成功要记录账号、时间和结果。”

小白

“这样以后才能直接测试。”

师傅

“对。”

03

编码阶段注意输入

外部输入不能直接相信。

开发人员

“地址是用户自己填写的。”

小白

“用户填什么就保存什么吗?”

师傅

“要检查长度、格式和允许的内容。”

小白

“文件上传和接口参数也一样?”

师傅

“对,都要做输入校验。”

04

安全一直跟到退役

上线不是生命周期终点。

小白

“功能测试通过以后就结束了吗?”

师傅

“还要上线核验、运行巡检、补丁、备份和权限复核。”

小白

“以后功能下线呢?”

师傅

“还要处理数据迁移、归档、删除和遗留账号。”

小白

“所以安全活动贯穿整个开发生命周期。”

02 · 小白做现场笔记

重要概念及注释

01

安全开发生命周期

正式含义
在软件立项、需求、设计、编码、测试、上线、运行和退役各阶段持续加入安全活动。
完整路线
立项与需求 ↓ 安全设计 ↓ 编码 ↓ 测试 ↓ 上线 ↓ 运行 ↓ 退役
教材要求每一项安全需求都能够追溯到设计、代码、测试结果和运行记录。
记忆类比
安全开发像盖厂房:
门锁、消防和逃生通道应该在设计阶段就考虑,而不是厂房盖完以后才临时补。

安全不是上线前最后检查一次,而是从需求开始一路跟到退役。

02

安全需求

正式含义
把业务和风险转化为可以实现、可以测试的具体技术要求。
一条完整需求要说明
保护什么对象 谁在使用 什么条件 可以做什么 系统怎样响应 留下什么记录
面包厂示例
模糊:
保护会员数据
具体:
普通客服查询会员资料时 手机号只显示前三位和后四位 查看完整号码需要审批 并记录访问日志
教材明确指出,模糊表述不能直接测试。

能直接写成测试用例的要求,才算足够具体。

03

安全设计原则

六项基础原则
最小权限 默认安全 职责分离 纵深防御 安全可用 可审计
面包厂场景
修改30份核心配方:
指定角色 + 受控网络 + 二次认证 + 审批 + 操作日志
不是只依靠一道权限。

一项重要操作,尽量不要只依赖一道安全措施。

04

输入校验

正式含义
系统接收用户、文件或接口输入时,对类型、格式、长度、范围和内容进行检查。
常见检查
字段长度 数据类型 允许字符 必填条件 文件类型 文件大小 参数格式
教材同时要求接口返回采用业务所需字段白名单,并避免在错误信息或日志中泄露敏感信息。

外部送进系统的数据,不能拿来就用,先检查再处理。

05

开发环境管理

正式含义
根据开发、测试、预生产和生产环境的不同用途,对数据、账号、密钥和权限分别实施管理。
| 环境 | 数据使用 |
| --- | ---------- |
| 开发 | 模拟或脱敏数据 |
| 测试 | 脱敏数据、最小数据集 |
| 预生产 | 受控或仿真数据 |
| 生产 | 真实业务数据 |

开发测试方便,不代表可以随意复制完整生产数据。

06

敏感配置

正式含义
能够直接访问系统、数据或安全能力的重要配置和凭证。
常见内容
生产密钥 证书私钥 数据库口令 访问令牌 高权限账号凭证
这些内容不应随意放入:
公共代码仓库 个人聊天工具 普通共享文档

代码可以共享,生产密钥和口令不能跟着一起共享。

07

依赖组件管理

正式含义
对软件使用的第三方组件、库和依赖进行来源、版本、升级和风险管理。
工作内容
记录组件名称 记录版本 确认来源 检查许可证 发现风险 评估升级 测试 审批 准备回退
教材要求第三方组件记录名称、版本、来源和许可证,并按评估、测试、审批和回退流程升级。

自己写的代码要管,系统依赖的第三方组件也要管。

03 · 经验和难点

小结

这一站,小白跟随一个会员系统新功能,从需求、设计、编码一直看到了测试、上线、运行和退役。最值得记住的经验是:安全需求越具体,后面的设计、开发和测试越容易验证。初学者最容易遇到的难点,是只写“加强安全”“保护数据”这类模糊要求,却没有明确对象、条件、动作、结果和日志。