一、安全需求概述

各位同学好,我是老赵。今天咱们开始聊安全需求。说实话,我做了十几年安全架构,见过太多项目把安全当成"最后贴的膏药"。结果呢?上线第一天就被捅出漏洞,然后整个团队通宵补锅。

为什么会这样?说白了,就是没搞明白安全需求到底是什么。

1.1 什么是安全需求

安全需求,不是让你写"系统要安全"这种废话。它是一组可验证的约束条件,用来保护系统的三个核心属性:

  • 机密性——数据只能被授权的人看到
  • 完整性——数据没有被篡改
  • 可用性——系统在需要的时候能正常工作

我习惯把安全需求拆成两层:

层次 说明 例子
业务安全需求 来自业务场景的约束 "只有本部门经理才能审批50万以上的报销单"
技术安全需求 实现业务约束的技术手段 "审批接口必须校验JWT中的角色字段"

你想想看,如果只写技术需求,业务方看不懂;只写业务需求,开发又不知道怎么落地。所以这两层必须对齐。

核心观点:安全需求是"系统在对抗环境下必须满足的行为约束"。它不是功能,是功能的"边界条件"。

1.2 安全需求与功能需求的区别

这个问题我每次上课都要讲。很多团队把安全需求混在功能需求里写,结果就是——"登录功能"写了一大堆,但"登录失败5次锁定账号"这种安全约束,没人提。

我画个对比表,大家一看就明白:

维度 功能需求 安全需求
关注点 系统"做什么" 系统"不能做什么"
触发条件 正常用户操作 恶意或异常行为
可测试性 正向用例验证 负向用例+攻击模拟
变更频率 随业务迭代 随威胁环境变化
典型表述 "用户能上传头像"

举个例子。我之前带过一个支付项目,产品经理写功能需求:"用户可以使用信用卡支付"。听起来没毛病吧?但安全需求呢?

  • 信用卡号必须加密存储(机密性)
  • 支付金额不能被篡改(完整性)
  • 同一笔订单不能重复扣款(一致性)
  • 支付接口必须限流,防止刷单(可用性)

你看,一个简单的"支付"功能,背后挂着四条安全需求。如果只写功能需求,开发做出来的东西就是"能跑,但一打就碎"。

我的经验:写需求的时候,把功能需求和安全需求分开列。功能需求用"用户故事",安全需求用"约束条件"。这样评审的时候,谁漏了安全点,一眼就能看出来。

1.3 安全需求的重要性

嗯,这里我要说点扎心的话。我见过太多公司,安全需求被当成"成本"而不是"投资"。结果呢?

我给你们看一组真实数据(来自我参与过的项目复盘):

安全活动介入阶段 修复一个漏洞的平均成本 修复时间
需求阶段 约 500 元 1-2 小时
设计阶段 约 2,000 元 半天
编码阶段 约 8,000 元 1-2 天
测试阶段 约 20,000 元 3-5 天
上线后 约 100,000+ 元 1-2 周(含公关)

我曾经接手过一个项目,上线后才发现用户ID直接暴露在URL里,改一下就能看别人的订单。修复本身只花了2小时,但数据泄露通报、用户赔偿、品牌损失……加起来超过50万。你说,如果在需求阶段就写一条"用户ID不能作为可枚举的查询参数",能花多少成本?

安全需求的重要性,我总结成三点:

  1. 决定架构的"地基"——安全需求没想清楚,后面改架构等于拆房子重盖
  2. 降低修复成本——越早发现,越便宜,这是铁律
  3. 满足合规要求——等保、GDPR、PCI-DSS,哪个不是安全需求的"硬约束"?

避坑指南:我曾经见过一个团队,为了赶上线,把安全需求全部砍掉,说"后面再补"。结果后面补了三个月,比正常开发还多花两倍时间。安全需求不是"可选项",是"必选项"。你跳过它,它迟早会跳回来咬你。

知识体系总览

下面这张图,是我对安全需求在整个软件架构中位置的总结。大家可以先有个整体印象:

安全需求知识体系结构图 安全需求知识体系 安全需求定义 机密性 完整性 可用性 安全需求分层 业务安全需求 技术安全需求 与功能需求的区别:关注"不能做什么" 重要性:决定架构地基 · 降低修复成本 · 满足合规

这张图把咱们今天讲的内容串起来了。从安全需求定义出发,到三大核心属性,再到分层结构,最后落到与功能需求的区别和重要性。后面的课程,我们会沿着这个结构一步步深入。

好,第一章就到这里。记住一句话:安全需求不是"附加题",是"必答题"。你越早答,代价越小。