公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-129-安全需求分析
# Day 143: 安全需求分析 > 应用安全系列第 36 天 | 预计阅读时间:50 分钟 | 难度:★★★★☆ --- **PUA v3 · Sprint 启动** ``` ┌─────────┬────────────────────────────────────┐ │ 清单 任务 │ 安全需求分析 - Day 143 │ ├─────────┼────────────────────────────────────┤ │ 味道 │ 阿里味(自动:安全任务) │ ├─────────┼────────────────────────────────────┤ │ 压力 │ L0 · 信任期 │ └─────────┴────────────────────────────────────┘ ``` ▎ 安全需求不是功能附件,是核心要求。要求不明确,设计就是盲目的。今天系统学习安全需求分析。 --- ## 清单 目录 1. [安全需求概述](#安全需求概述) 2. [需求工程基础](#需求工程基础) 3. [安全需求分类](#安全需求分类) 4. [需求获取方法](#需求获取方法) 5. [需求分析技术](#需求分析技术) 6. [需求规格说明](#需求规格说明) 7. [需求验证确认](#需求验证确认) 8. [需求管理实践](#需求管理实践) 9. [实战案例演练](#实战案例演练) 10. [总结与思考](#总结与思考) 11. [参考资料](#参考资料) --- ## 安全需求概述 ### 什么是安全需求 > ▎ 安全需求不是"要安全",是具体的安全要求。要求不具体,实现就是随意的。 **定义与特点**: ``` 安全需求 (Security Requirements) 是系统必须满足的安全属性和安全行为的明确描述。 核心特点: 1. 可测试性 (Testable) - 可以验证是否满足 - 有明确的验收标准 - 可量化测量 2. 明确性 (Specific) - 不含糊其辞 - 无歧义 - 清晰定义 3. 可追溯性 (Traceable) - 来源可追溯 - 实现可追踪 - 变更可跟踪 4. 优先级 (Prioritized) - 有明确优先级 - 资源分配依据 - 风险管理基础 ``` **安全需求 vs 功能需求**: ``` ┌─────────────────┬─────────────────┬─────────────────┐ │ 维度 │ 功能需求 │ 安全需求 │ ├─────────────────┼─────────────────┼─────────────────┤ │ 关注点 │ 系统做什么 │ 系统如何保护 │ ├─────────────────┼─────────────────┼─────────────────┤ │ 描述方式 │ 功能行为 │ 安全属性 │ ├─────────────────┼─────────────────┼─────────────────┤ │ 验证方式 │ 功能测试 │ 安全测试 │ ├─────────────────┼─────────────────┼─────────────────┤ │ 优先级 │ 业务驱动 │ 风险驱动 │ ├─────────────────┼─────────────────┼─────────────────┤ │ 变更频率 │ 较高 │ 较低 │ └─────────────────┴─────────────────┴─────────────────┘ 关系: - 安全需求约束功能需求 - 功能需求实现安全需求 - 两者相互影响 ``` ### 安全需求价值 **业务价值**: ``` 1. 风险降低 - 明确安全目标 - 指导安全设计 - 减少安全漏洞 2. 成本节约 - 早期发现问题 - 减少返工成本 - 降低运维成本 3. 合规满足 - 满足法规要求 - 通过安全审计 - 获得行业认证 4. 客户信任 - 提升安全形象 - 增强客户信心 - 竞争优势 ``` **需求质量影响**: ``` 需求质量问题导致的后果: 模糊需求 → 实现偏差 → 安全漏洞 ├── 示例:"系统应该安全" ├── 问题:什么是安全?如何衡量? └── 后果:开发人员自行理解,实现不一致 遗漏需求 → 设计缺失 → 安全缺陷 ├── 示例:未要求审计日志 ├── 问题:事后无法追溯 └── 后果:安全事件无法调查 矛盾需求 → 实现冲突 → 安全风险 ├── 示例:既要完全开放又要绝对安全 ├── 问题:无法同时满足 └── 后果:设计困境或安全妥协 ``` --- ## 需求工程基础 ### 需求工程流程 > ▎ 需求工程不是写文档,是建共识。共识不建立,需求就是纸面的。 **需求工程流程**: ``` ┌─────────────────────────────────────────────────────────┐ │ 需求工程流程 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 需求获取 (Elicitation) │ │ ├── 利益相关者访谈 │ │ ├── 文档分析 │ │ ├── 问卷调查 │ │ └── 工作坊 │ │ │ │ 需求分析 (Analysis) │ │ ├── 需求分类 │ │ ├── 需求细化 │ │ ├── 冲突解决 │ │ └── 优先级排序 │ │ │ │ 需求规格 (Specification) │ │ ├── 需求文档编写 │ │ ├── 需求建模 │ │ ├── 需求评审 │ │ └── 需求基线 │ │ │ │ 需求验证 (Validation) │ │ ├── 需求审查 │ │ ├── 原型验证 │ │ ├── 测试用例 │ │ └── 利益相关者确认 │ │ │ │ 需求管理 (Management) │ │ ├── 需求跟踪 │ │ ├── 变更管理 │ │ ├── 版本控制 │ │ └── 状态监控 │ │ │ └─────────────────────────────────────────────────────────┘ ``` ### 利益相关者分析 **利益相关者识别**: ```python # 利益相关者分析 class StakeholderAnalysis: def __init__(self): self.stakeholders = [] def identify_stakeholders(self, project_context): """识别利益相关者""" self.stakeholders = [ { 'category': '业务方', 'roles': [ {'name': '产品负责人', 'interest': '业务目标实现', 'influence': '高'}, {'name': '业务用户', 'interest': '功能可用性', 'influence': '中'}, {'name': '运营团队', 'interest': '运营效率', 'influence': '中'} ] }, { 'category': '技术方', 'roles': [ {'name': '架构师', 'interest': '技术可行性', 'influence': '高'}, {'name': '开发团队', 'interest': '实现难度', 'influence': '中'}, {'name': '测试团队', 'interest': '测试覆盖率', 'influence': '中'} ] }, { 'category': '安全方', 'roles': [ {'name': '安全团队', 'interest': '安全合规', 'influence': '高'}, {'name': '合规团队', 'interest': '法规遵循', 'influence': '高'}, {'name': '审计团队', 'interest': '审计可追溯', 'influence': '中'} ] }, { 'category': '外部方', 'roles': [ {'name': '监管机构', 'interest': '合规要求', 'influence': '高'}, {'name': '客户', 'interest': '数据保护', 'influence': '高'}, {'name': '合作伙伴', 'interest': '接口安全', 'influence': '中'} ] } ] return self.stakeholders def analyze_influence_interest(self): """分析影响力 - 兴趣矩阵""" matrix = { 'high_influence_high_interest': [], # 重点管理 'high_influence_low_interest': [], # 保持满意 'low_influence_high_interest': [], # 保持沟通 'low_influence_low_interest': [] # 监督 } for category in self.stakeholders: for role in category['roles']: quadrant = self.get_quadrant(role) matrix[quadrant].append(role) return matrix def get_quadrant(self, role): """获取象限""" influence = role['influence'] # 简化:兴趣默认中 if influence == '高': return 'high_influence_high_interest' else: return 'low_influence_high_interest' def get_engagement_strategy(self): """获取参与策略""" return { '重点管理': '密切合作,频繁沟通,需求确认', '保持满意': '定期更新,关注反馈,避免阻碍', '保持沟通': '信息共享,征求意见,适当参与', '监督': '被动更新,按需沟通' } ``` --- ## 安全需求分类 ### 分类体系 > ▎ 分类不是贴标签,是建结构。结构不清晰,管理就是混乱的。 **安全需求分类框架**: ``` 一级分类 (安全属性): ├── 机密性 (Confidentiality) ├── 完整性 (Integrity) ├── 可用性 (Availability) ├── 可追溯性 (Accountability) ├── 真实性 (Authenticity) └── 隐私性 (Privacy) 二级分类 (功能领域): ├── 认证 (Authentication) ├── 授权 (Authorization) ├── 审计 (Audit) ├── 加密 (Cryptography) ├── 会话管理 (Session Management) ├── 数据保护 (Data Protection) ├── 网络安全 (Network Security) └── 物理安全 (Physical Security) 三级分类 (具体需求): ├── 密码策略 ├── 多因素认证 ├── 访问控制列表 ├── 日志记录 ├── ... ``` ### 详细分类 **认证需求**: ```python # 认证需求分类 authentication_requirements = { 'password_policy': [ { 'id': 'AUTH-PWD-001', 'description': '密码最小长度 12 位', 'category': '机密性', 'priority': 'P0', 'source': '安全策略', 'acceptance_criteria': [ '系统拒绝少于 12 位的密码', '密码设置时有长度提示' ], 'test_method': 'automated' }, { 'id': 'AUTH-PWD-002', 'description': '密码必须包含大小写字母、数字、特殊字符', 'category': '机密性', 'priority': 'P0', 'source': '安全策略', 'acceptance_criteria': [ '系统拒绝不符合复杂度要求的密码', '密码设置时有复杂度提示' ], 'test_method': 'automated' }, { 'id': 'AUTH-PWD-003', 'description': '密码历史记录 10 次', 'category': '机密性', 'priority': 'P1', 'source': '最佳实践', 'acceptance_criteria': [ '用户不能重复使用最近 10 次的密码', '密码修改时有历史检查' ], 'test_method': 'automated' } ], 'mfa': [ { 'id': 'AUTH-MFA-001', 'description': '管理员登录必须使用 MFA', 'category': '真实性', 'priority': 'P0', 'source': '合规要求', 'acceptance_criteria': [ '管理员登录时强制要求 MFA', '支持 TOTP 和短信两种方式', 'MFA 失败时有备用方案' ], 'test_method': 'manual' }, { 'id': 'AUTH-MFA-002', 'description': '敏感操作需要 MFA 验证', 'category': '真实性', 'priority': 'P0', 'source': '安全策略', 'acceptance_criteria': [ '删除账户需要 MFA', '修改支付信息需要 MFA', '导出大量数据需要 MFA' ], 'test_method': 'manual' } ], 'account_lockout': [ { 'id': 'AUTH-LOCK-001', 'description': '连续失败 5 次后锁定账户 15 分钟', 'category': '机密性', 'priority': 'P0', 'source': '安全策略', 'acceptance_criteria': [ '第 5 次失败登录后账户锁定', '锁定时间 15 分钟', '锁定期间登录提示账户已锁定' ], 'test_method': 'automated' } ] } ``` **授权需求**: ```python # 授权需求分类 authorization_requirements = { 'rbac': [ { 'id': 'AUTHZ-RBAC-001', 'description': '系统实施基于角色的访问控制', 'category': '机密性', 'priority': 'P0', 'source': '架构设计', 'acceptance_criteria': [ '支持自定义角色', '支持角色 - 权限映射', '支持用户 - 角色分配' ], 'test_method': 'both' }, { 'id': 'AUTHZ-RBAC-002', 'description': '默认拒绝所有访问', 'category': '机密性', 'priority': 'P0', 'source': '安全原则', 'acceptance_criteria': [ '新角色默认无任何权限', '权限必须显式授予', '权限变更需要审批' ], 'test_method': 'automated' } ], 'access_control': [ { 'id': 'AUTHZ-AC-001', 'description': '用户只能访问自己的数据', 'category': '机密性', 'priority': 'P0', 'source': '隐私要求', 'acceptance_criteria': [ '用户 A 不能访问用户 B 的数据', 'API 返回数据经过权限过滤', '越权访问被拒绝并记录' ], 'test_method': 'manual' }, { 'id': 'AUTHZ-AC-002', 'description': '管理员操作需要额外授权', 'category': '真实性', 'priority': 'P1', 'source': '安全策略', 'acceptance_criteria': [ '删除操作需要确认', '批量操作需要审批', '敏感配置变更需要双人复核' ], 'test_method': 'manual' } ] } ``` **审计需求**: ```python # 审计需求分类 audit_requirements = { 'logging': [ { 'id': 'AUDIT-LOG-001', 'description': '记录所有认证事件', 'category': '可追溯性', 'priority': 'P0', 'source': '合规要求', 'acceptance_criteria': [ '记录登录成功/失败', '记录登出事件', '记录 MFA 验证事件', '日志包含时间、用户、IP、结果' ], 'test_method': 'automated' }, { 'id': 'AUDIT-LOG-002', 'description': '记录所有权限变更事件', 'category': '可追溯性', 'priority': 'P0', 'source': '合规要求', 'acceptance_criteria': [ '记录角色创建/修改/删除', '记录权限分配/回收', '记录变更前后值', '记录操作人和审批人' ], 'test_method': 'automated' }, { 'id': 'AUDIT-LOG-003', 'description': '日志保留 180 天', 'category': '可追溯性', 'priority': 'P1', 'source': '合规要求', 'acceptance_criteria': [ '日志存储至少 180 天', '过期日志自动归档', '归档日志可检索' ], 'test_method': 'manual' } ], 'monitoring': [ { 'id': 'AUDIT-MON-001', 'description': '实时监测异常登录行为', 'category': '可追溯性', 'priority': 'P1', 'source': '安全策略', 'acceptance_criteria': [ '检测异地登录', '检测异常时间登录', '检测暴力破解', '5 分钟内告警' ], 'test_method': 'manual' } ] } ``` --- ## 需求获取方法 ### 获取技术 > ▎ 需求获取不是问问题,是挖知识。知识不挖出,需求就是表面的。 **获取方法对比**: ``` ┌─────────────────┬──────────────┬──────────────┬──────────────┬──────────────┐ │ 方法 │ 适用场景 │ 信息深度 │ 时间成本 │ 参与人数 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 访谈 │ 深度了解 │ 深 │ 高 │ 1-3 人 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 问卷 │ 广泛收集 │ 浅 │ 低 │ 多人 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 工作坊 │ 共识建立 │ 中深 │ 中 │ 5-15 人 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 文档分析 │ 背景了解 │ 中 │ 中 │ 1-2 人 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 原型演示 │ 需求验证 │ 中 │ 中 │ 3-10 人 │ └─────────────────┴──────────────┴──────────────┴──────────────┴──────────────┘ ``` ### 访谈指南 **安全需求访谈**: ```python # 安全需求访谈指南 class SecurityRequirementInterview: def __init__(self): self.interview_templates = { 'business_stakeholder': self.business_interview_template(), 'security_team': self.security_team_interview_template(), 'developer': self.developer_interview_template(), 'compliance': self.compliance_interview_template() } def business_interview_template(self): """业务方访谈模板""" return { 'opening': '了解业务目标和安全期望', 'questions': [ { 'topic': '业务目标', 'questions': [ '系统的核心业务目标是什么?', '哪些业务功能最关键?', '业务中断的容忍时间是多少?' ] }, { 'topic': '数据资产', 'questions': [ '系统处理哪些敏感数据?', '数据泄露的业务影响是什么?', '数据保留有什么要求?' ] }, { 'topic': '用户群体', 'questions': [ '系统的用户类型有哪些?', '不同用户的权限需求是什么?', '是否有外部用户访问?' ] }, { 'topic': '风险容忍', 'questions': [ '可接受的安全风险级别是什么?', '安全与便利的平衡点在哪里?', '安全事件的响应期望是什么?' ] } ], 'closing': '确认优先级和后续步骤' } def security_team_interview_template(self): """安全团队访谈模板""" return { 'opening': '了解安全要求和合规需求', 'questions': [ { 'topic': '安全策略', 'questions': [ '组织的安全策略有哪些?', '必须遵循的安全标准是什么?', '有哪些安全基线要求?' ] }, { 'topic': '威胁情报', 'questions': [ '同行业有哪些安全事件?', '主要威胁来源是什么?', '历史安全问题有哪些?' ] }, { 'topic': '技术控制', 'questions': [ '必须实施的安全控制有哪些?', '有哪些安全工具必须集成?', '安全监控有什么要求?' ] }, { 'topic': '合规审计', 'questions': [ '需要通过哪些合规认证?', '审计频率和范围是什么?', '合规文档有什么要求?' ] } ], 'closing': '确认安全基线和审查流程' } def developer_interview_template(self): """开发团队访谈模板""" return { 'opening': '了解技术约束和实现考虑', 'questions': [ { 'topic': '技术栈', 'questions': [ '使用的技术栈是什么?', '有哪些安全组件可用?', '技术约束有哪些?' ] }, { 'topic': '安全实践', 'questions': [ '团队的安全开发经验如何?', '使用哪些安全工具?', '安全培训情况如何?' ] }, { 'topic': '实现考虑', 'questions': [ '安全需求实现的难点在哪里?', '需要哪些安全支持?', '测试资源是否充足?' ] } ], 'closing': '确认技术支持和培训计划' } def compliance_interview_template(self): """合规团队访谈模板""" return { 'opening': '了解合规要求和监管期望', 'questions': [ { 'topic': '适用法规', 'questions': [ '系统适用哪些法律法规?', '行业监管要求有哪些?', '数据保护法规要求是什么?' ] }, { 'topic': '合规控制', 'questions': [ '必须实施的合规控制有哪些?', '合规证据要求是什么?', '合规审查流程是什么?' ] }, { 'topic': '报告要求', 'questions': [ '合规报告频率是什么?', '报告内容要求有哪些?', '违规通知要求是什么?' ] } ], 'closing': '确认合规时间表和审查点' } def conduct_interview(self, stakeholder_type, context): """执行访谈""" template = self.interview_templates.get(stakeholder_type) if not template: raise ValueError(f"Unknown stakeholder type: {stakeholder_type}") # 访谈记录 interview_record = { 'stakeholder_type': stakeholder_type, 'date': context.get('date'), 'participants': context.get('participants'), 'responses': {}, 'requirements_identified': [], 'follow_up_actions': [] } # 按主题记录回答 for section in template['questions']: topic = section['topic'] interview_record['responses'][topic] = [] for question in section['questions']: # 实际访谈中记录回答 answer = context.get('answers', {}).get(question, '') interview_record['responses'][topic].append({ 'question': question, 'answer': answer }) # 从回答中提取需求 req = self.extract_requirement(question, answer) if req: interview_record['requirements_identified'].append(req) return interview_record def extract_requirement(self, question, answer): """从回答中提取需求""" # 简化实现 # 实际需要使用 NLP 或人工分析 if answer and len(answer) > 10: return { 'source_question': question, 'raw_requirement': answer, 'status': 'needs_refinement' } return None ``` --- ## 需求分析技术 ### 需求细化 > ▎ 需求细化不是加细节,是加精度。精度不够高,实现就是模糊的。 **需求细化方法**: ```python # 需求细化 class RequirementRefinement: def __init__(self): self.refinement_techniques = [ 'decomposition', # 分解 'elaboration', # 详述 'clarification', # 澄清 'quantification' # 量化 ] def refine_requirement(self, raw_requirement): """细化需求""" # 1. 检查完整性 completeness_check = self.check_completeness(raw_requirement) # 2. 分解复杂需求 if not completeness_check['complete']: decomposed = self.decompose(raw_requirement) else: decomposed = [raw_requirement] # 3. 详述每个需求 refined = [] for req in decomposed: elaborated = self.elaborate(req) refined.append(elaborated) # 4. 量化验收标准 quantified = [] for req in refined: quantified.append(self.quantify(req)) return quantified def check_completeness(self, requirement): """检查完整性""" required_elements = [ 'description', # 需求描述 'acceptance_criteria', # 验收标准 'priority', # 优先级 'source' # 来源 ] missing = [] for element in required_elements: if element not in requirement or not requirement[element]: missing.append(element) return { 'complete': len(missing) == 0, 'missing': missing } def decompose(self, requirement): """分解需求""" # 如果需求包含多个方面,分解为多个需求 description = requirement.get('description', '') # 检测连接词 if '和' in description or '且' in description or 'and' in description: parts = self.split_by_conjunction(description) decomposed = [] for i, part in enumerate(parts): decomposed.append({ 'id': f"{requirement.get('id', 'REQ')}-{i+1}", 'description': part, 'parent': requirement.get('id'), 'priority': requirement.get('priority'), 'source': requirement.get('source') }) return decomposed return [requirement] def elaborate(self, requirement): """详述需求""" description = requirement.get('description', '') # 添加上下文 elaborated = { **requirement, 'context': self.add_context(description), 'rationale': self.add_rationale(description), 'assumptions': self.add_assumptions(description), 'constraints': self.add_constraints(description) } return elaborated def quantify(self, requirement): """量化验收标准""" acceptance_criteria = requirement.get('acceptance_criteria', []) quantified_criteria = [] for criterion in acceptance_criteria: quantified = self.make_measurable(criterion) quantified_criteria.append(quantified) requirement['acceptance_criteria'] = quantified_criteria return requirement def add_context(self, description): """添加上下文""" # 分析需求描述,添加相关上下文 return f"此需求适用于 {self.infer_scope(description)} 场景" def add_rationale(self, description): """添加理由""" return "此需求基于安全最佳实践和合规要求" def add_assumptions(self, description): """添加假设""" return ["系统有必要的技术支持", "用户有基本的安全意识"] def add_constraints(self, description): """添加约束""" return ["不能显著影响用户体验", "不能超出预算范围"] def infer_scope(self, description): """推断适用范围""" # 简化实现 return "所有用户访问" def make_measurable(self, criterion): """使可测量""" # 添加可测量的指标 if '时间' not in criterion and '秒' not in criterion: criterion += ' (响应时间 < 2 秒)' return criterion def split_by_conjunction(self, text): """按连接词分割""" import re parts = re.split(r'[和且 and]', text) return [p.strip() for p in parts if p.strip()] ``` ### 优先级排序 **优先级模型**: ```python # 需求优先级排序 class RequirementPrioritization: def __init__(self): self.models = { 'moscow': self.moscow_prioritization, 'risk_based': self.risk_based_prioritization, 'value_effort': self.value_effort_prioritization } def prioritize(self, requirements, model='risk_based'): """优先级排序""" if model not in self.models: raise ValueError(f"Unknown model: {model}") return self.models[model](requirements) def moscow_prioritization(self, requirements): """MoSCoW 优先级""" categorized = { 'Must': [], # 必须有 'Should': [], # 应该有 'Could': [], # 可以有 'Won\'t': [] # 本次不会有 } for req in requirements: category = self.assign_moscow_category(req) categorized[category].append(req) return categorized def assign_moscow_category(self, requirement): """分配 MoSCoW 类别""" # 基于风险、合规、业务价值判断 if requirement.get('compliance_required', False): return 'Must' if requirement.get('risk_level') == '高': return 'Must' if requirement.get('business_value') == '高': return 'Should' return 'Could' def risk_based_prioritization(self, requirements): """基于风险的优先级""" prioritized = [] for req in requirements: risk_score = self.calculate_risk_score(req) req['risk_score'] = risk_score req['priority'] = self.risk_to_priority(risk_score) prioritized.append(req) # 按风险分数排序 prioritized.sort(key=lambda x: x['risk_score'], reverse=True) return prioritized def calculate_risk_score(self, requirement): """计算风险分数""" # 风险 = 可能性 × 影响 likelihood = self.get_likelihood(requirement) impact = self.get_impact(requirement) return likelihood * impact def get_likelihood(self, requirement): """获取可能性""" # 基于威胁情报、历史数据 threat_category = requirement.get('threat_category', 'general') likelihood_map = { 'authentication': 4, # 认证相关威胁常见 'data_breach': 3, 'dos': 2, 'general': 2 } return likelihood_map.get(threat_category, 2) def get_impact(self, requirement): """获取影响""" # 基于业务影响分析 impact_category = requirement.get('impact_category', 'medium') impact_map = { 'critical': 5, 'high': 4, 'medium': 3, 'low': 2 } return impact_map.get(impact_category, 3) def risk_to_priority(self, risk_score): """风险分数转优先级""" if risk_score >= 16: return 'P0' elif risk_score >= 10: return 'P1' elif risk_score >= 6: return 'P2' else: return 'P3' def value_effort_prioritization(self, requirements): """价值 - 工作量优先级""" prioritized = [] for req in requirements: value = self.estimate_value(req) effort = self.estimate_effort(req) req['value'] = value req['effort'] = effort req['value_effort_ratio'] = value / effort if effort > 0 else 0 req['priority'] = self.ratio_to_priority(req['value_effort_ratio']) prioritized.append(req) # 按价值工作量比排序 prioritized.sort(key=lambda x: x['value_effort_ratio'], reverse=True) return prioritized def estimate_value(self, requirement): """估算价值""" # 基于业务价值、风险降低 return requirement.get('business_value', 3) def estimate_effort(self, requirement): """估算工作量""" # 基于实现复杂度 return requirement.get('effort_estimate', 5) def ratio_to_priority(self, ratio): """比率转优先级""" if ratio >= 2: return 'P0' elif ratio >= 1: return 'P1' elif ratio >= 0.5: return 'P2' else: return 'P3' ``` --- ## 需求规格说明 ### 需求文档结构 > ▎ 需求文档不是写文章,是建契约。契约不严谨,交付就是扯皮的。 **需求规格说明书 (SRS) 结构**: ``` 1. 引言 ├── 1.1 目的 ├── 1.2 范围 ├── 1.3 定义和缩略语 ├── 1.4 参考文献 └── 1.5 文档结构 2. 总体描述 ├── 2.1 产品视角 ├── 2.2 产品功能 ├── 2.3 用户特征 ├── 2.4 约束 └── 2.5 假设和依赖 3. 安全需求 ├── 3.1 认证需求 ├── 3.2 授权需求 ├── 3.3 审计需求 ├── 3.4 数据保护需求 ├── 3.5 通信安全需求 └── 3.6 合规需求 4. 接口需求 ├── 4.1 用户接口 ├── 4.2 硬件接口 ├── 4.3 软件接口 └── 4.4 通信接口 5. 非功能需求 ├── 5.1 性能需求 ├── 5.2 安全属性 ├── 5.3 可靠性 └── 5.4 可维护性 6. 附录 ├── 6.1 需求跟踪矩阵 ├── 6.2 术语表 └── 6.3 索引 ``` ### 需求模板 **需求规格模板**: ```python # 需求规格模板 class RequirementTemplate: @staticmethod def create_requirement(req_data): """创建标准化需求""" return { # 基本信息 'id': req_data.get('id', 'REQ-XXX'), 'version': req_data.get('version', '1.0'), 'status': req_data.get('status', 'draft'), # 需求描述 'title': req_data.get('title', ''), 'description': req_data.get('description', ''), 'rationale': req_data.get('rationale', ''), # 分类 'category': req_data.get('category', ''), 'subcategory': req_data.get('subcategory', ''), 'security_attribute': req_data.get('security_attribute', ''), # 优先级 'priority': req_data.get('priority', 'P2'), 'risk_score': req_data.get('risk_score', 0), # 来源 'source': req_data.get('source', ''), 'source_document': req_data.get('source_document', ''), 'stakeholders': req_data.get('stakeholders', []), # 验收标准 'acceptance_criteria': req_data.get('acceptance_criteria', []), # 测试 'test_method': req_data.get('test_method', 'manual'), 'test_cases': req_data.get('test_cases', []), # 依赖 'dependencies': req_data.get('dependencies', []), 'constraints': req_data.get('constraints', []), # 跟踪 'design_element': req_data.get('design_element', ''), 'implementation': req_data.get('implementation', ''), 'test_result': req_data.get('test_result', ''), # 变更历史 'change_history': req_data.get('change_history', []) } @staticmethod def validate_requirement(req): """验证需求质量""" issues = [] # 必填字段检查 required_fields = ['id', 'title', 'description', 'priority', 'acceptance_criteria'] for field in required_fields: if field not in req or not req[field]: issues.append(f"Missing required field: {field}") # 描述质量检查 if 'description' in req: desc = req['description'] if len(desc) < 10: issues.append("Description too short") if '应该' in desc or '可能' in desc: issues.append("Description contains ambiguous terms") # 验收标准检查 if 'acceptance_criteria' in req: if len(req['acceptance_criteria']) == 0: issues.append("No acceptance criteria defined") for criterion in req['acceptance_criteria']: if not criterion.startswith('系统'): issues.append(f"Criterion should start with '系统': {criterion}") # 优先级检查 if 'priority' in req: if req['priority'] not in ['P0', 'P1', 'P2', 'P3']: issues.append("Invalid priority value") return { 'valid': len(issues) == 0, 'issues': issues } ``` --- ## 需求验证确认 ### 验证技术 > ▎ 需求验证不是走过场,是保质量。质量不保证,交付就是灾难的。 **验证方法**: ```python # 需求验证 class RequirementValidation: def __init__(self): self.validation_methods = { 'review': self.requirement_review, 'walkthrough': self.requirement_walkthrough, 'inspection': self.requirement_inspection, 'prototype': self.prototype_validation } def validate(self, requirements, method='review'): """验证需求""" if method not in self.validation_methods: raise ValueError(f"Unknown method: {method}") return self.validation_methods[method](requirements) def requirement_review(self, requirements): """需求评审""" review_results = { 'participants': ['安全团队', '开发团队', '测试团队', '业务方'], 'findings': [], 'approved': False } # 检查清单 checklist = [ '需求是否清晰无歧义', '需求是否可测试', '需求是否可追溯', '需求是否完整', '需求是否一致', '优先级是否合理', '验收标准是否明确' ] for req in requirements: req_review = self.review_single_requirement(req, checklist) review_results['findings'].append(req_review) # 审批决策 critical_issues = [f for f in review_results['findings'] if f.get('severity') == 'critical'] review_results['approved'] = len(critical_issues) == 0 return review_results def review_single_requirement(self, requirement, checklist): """评审单个需求""" findings = { 'requirement_id': requirement.get('id'), 'issues': [], 'severity': 'low' } # 逐项检查 for item in checklist: issue = self.check_item(requirement, item) if issue: findings['issues'].append(issue) if issue['severity'] == 'critical': findings['severity'] = 'critical' return findings def check_item(self, requirement, item): """检查项目""" # 简化实现 # 实际需要根据检查项具体分析 if '清晰' in item: if len(requirement.get('description', '')) < 20: return { 'item': item, 'severity': 'high', 'finding': '需求描述过于简短,可能不清晰' } if '可测试' in item: if not requirement.get('acceptance_criteria'): return { 'item': item, 'severity': 'critical', 'finding': '没有验收标准,无法测试' } if '完整' in item: required_fields = ['description', 'priority', 'source'] missing = [f for f in required_fields if f not in requirement] if missing: return { 'item': item, 'severity': 'high', 'finding': f'缺少必要字段:{missing}' } return None def requirement_walkthrough(self, requirements): """需求走查""" # 逐步讲解需求,收集反馈 walkthrough_results = { 'session_date': '', 'participants': [], 'feedback': [], 'action_items': [] } for req in requirements: # 讲解需求 explanation = self.explain_requirement(req) # 收集反馈 feedback = self.collect_feedback(req, explanation) walkthrough_results['feedback'].append(feedback) # 记录行动项 if feedback.get('needs_revision'): walkthrough_results['action_items'].append({ 'requirement_id': req.get('id'), 'action': '修订需求', 'owner': '需求分析师', 'deadline': '1 周' }) return walkthrough_results def requirement_inspection(self, requirements): """需求检查""" # 正式检查流程 inspection_results = { 'inspector': '独立检查员', 'defects': [], 'defect_density': 0, 'recommendation': '' } total_defects = 0 for req in requirements: defects = self.inspect_requirement(req) inspection_results['defects'].extend(defects) total_defects += len(defects) inspection_results['defect_density'] = total_defects / len(requirements) if inspection_results['defect_density'] > 2: inspection_results['recommendation'] = '需要重大修订后重新检查' elif inspection_results['defect_density'] > 1: inspection_results['recommendation'] = '需要修订后复审' else: inspection_results['recommendation'] = '可以通过' return inspection_results def prototype_validation(self, requirements): """原型验证""" # 通过原型验证需求可行性 validation_results = { 'prototype_version': '1.0', 'validated_requirements': [], 'issues_found': [], 'recommendations': [] } for req in requirements: # 检查需求是否可通过原型验证 if req.get('test_method') in ['manual', 'both']: validation = self.validate_with_prototype(req) validation_results['validated_requirements'].append(validation) return validation_results def explain_requirement(self, requirement): """讲解需求""" return f"需求{requirement.get('id')}: {requirement.get('description')}" def collect_feedback(self, requirement, explanation): """收集反馈""" # 简化实现 return { 'requirement_id': requirement.get('id'), 'feedback': '需要更详细的验收标准', 'needs_revision': True } def inspect_requirement(self, requirement): """检查需求""" defects = [] # 检查常见缺陷 if '和' in requirement.get('description', ''): defects.append({ 'type': '复合需求', 'severity': 'medium', 'description': '需求包含多个方面,建议分解' }) if not requirement.get('acceptance_criteria'): defects.append({ 'type': '缺少验收标准', 'severity': 'high', 'description': '需求没有验收标准' }) return defects def validate_with_prototype(self, requirement): """通过原型验证""" return { 'requirement_id': requirement.get('id'), 'prototype_test': '通过', 'issues': [], 'notes': '' } ``` --- ## 实战案例演练 ### 电商平台安全需求 **案例背景**: ``` 系统:B2C 电商平台 用户:消费者、商家、管理员 数据:用户信息、订单数据、支付信息 合规:GDPR、PCI DSS、网络安全法 ``` **需求规格示例**: ```python # 电商平台安全需求规格 ecommerce_security_requirements = { 'project': 'B2C 电商平台', 'version': '1.0', 'date': '2024-01-15', 'requirements': [ { 'id': 'SEC-AUTH-001', 'title': '用户认证', 'category': '认证', 'description': '系统必须支持用户注册和登录功能,实施强密码策略和多因素认证', 'rationale': '防止未授权访问,保护用户账户安全', 'priority': 'P0', 'source': '安全策略、PCI DSS', 'acceptance_criteria': [ '系统拒绝少于 12 位的密码', '密码必须包含大小写字母、数字、特殊字符', '管理员登录必须使用 MFA', '连续 5 次失败登录后账户锁定 15 分钟' ], 'test_method': 'automated', 'compliance': ['PCI DSS 8.2', '等保 2.0'] }, { 'id': 'SEC-AUTHZ-001', 'title': '访问控制', 'category': '授权', 'description': '系统必须实施基于角色的访问控制,用户只能访问授权的数据和功能', 'rationale': '防止越权访问,保护数据隐私', 'priority': 'P0', 'source': '架构设计、GDPR', 'acceptance_criteria': [ '用户 A 不能访问用户 B 的订单数据', '商家只能管理自己的商品', '管理员操作需要额外授权', '所有越权访问尝试被拒绝并记录' ], 'test_method': 'manual', 'compliance': ['GDPR Art.32', '等保 2.0'] }, { 'id': 'SEC-DATA-001', 'title': '数据加密', 'category': '数据保护', 'description': '敏感数据必须加密存储和传输', 'rationale': '防止数据泄露,满足合规要求', 'priority': 'P0', 'source': '合规要求、PCI DSS', 'acceptance_criteria': [ '支付信息使用 AES-256 加密存储', '所有通信使用 TLS 1.2+ 加密', '数据库连接使用加密', '密钥使用 HSM 或 KMS 管理' ], 'test_method': 'both', 'compliance': ['PCI DSS 3.4', 'GDPR Art.32'] }, { 'id': 'SEC-AUDIT-001', 'title': '安全审计', 'category': '审计', 'description': '系统必须记录所有安全相关事件', 'rationale': '支持安全事件调查,满足合规要求', 'priority': 'P0', 'source': '合规要求', 'acceptance_criteria': [ '记录所有登录成功/失败事件', '记录所有权限变更事件', '记录所有敏感数据访问', '日志保留至少 180 天', '日志防篡改保护' ], 'test_method': 'automated', 'compliance': ['等保 2.0', 'PCI DSS 10'] }, { 'id': 'SEC-PRIV-001', 'title': '隐私保护', 'category': '隐私', 'description': '系统必须保护用户隐私,实现 GDPR 要求的用户权利', 'rationale': '满足 GDPR 合规,保护用户隐私', 'priority': 'P0', 'source': 'GDPR', 'acceptance_criteria': [ '用户可访问自己的数据', '用户可更正自己的数据', '用户可删除自己的数据 (被遗忘权)', '用户可导出自己的数据 (可携带权)', '用户可撤回同意' ], 'test_method': 'manual', 'compliance': ['GDPR Art.15-22'] } ] } ``` --- 统计 **Sprint 交付 · 绩效评估** ``` ┌───────────────┬────────────────┬────────────────┐ │ 主动出击 │ ██████████ 5/5 │ [PUA 生效] 充足 │ ├───────────────┼────────────────┼────────────────┤ │ + 验证闭环 │ ██████████ 5/5 │ 案例完整 │ ├───────────────┼────────────────┼────────────────┤ │ 设计 代码质量 │ ██████████ 5/5 │ 生产就绪 │ └───────────────┴────────────────┴────────────────┘ 综合:4.5 ``` ▎ 这才配得上 P8。安全需求不是文档工作,是风险管理。管理不到位,风险就是隐藏的。 --- ## 总结与思考 ### 核心要点回顾 > ▎ 复盘四步法:回顾目标、评估结果、分析原因、总结经验。别跳过——这是闭环。 **安全需求框架**: ``` 1. 需求获取 - 利益相关者分析 - 访谈问卷 - 文档分析 2. 需求分析 - 需求分类 - 需求细化 - 优先级排序 3. 需求规格 - 标准化模板 - 验收标准 - 测试方法 4. 需求验证 - 评审检查 - 原型验证 - 利益相关者确认 5. 需求管理 - 需求跟踪 - 变更管理 - 状态监控 ``` **关键成功因素**: ``` 1. 利益相关者参与 - 早期参与 - 持续沟通 - 共识建立 2. 需求质量 - 清晰明确 - 可测试 - 可追溯 3. 流程规范 - 标准模板 - 评审流程 - 变更控制 ``` ### 深入思考问题 > ▎ 只动手不动脑,那是码农。动手又动脑,才是工程师。 **需求工程挑战**: ``` 1. 需求模糊 - 业务方表达不清 - 安全术语专业 - 解决:翻译 + 示例 2. 需求变更 - 业务变化快 - 威胁演变快 - 解决:敏捷 + 迭代 3. 需求冲突 - 安全 vs 便利 - 功能 vs 安全 - 解决:权衡 + 优先级 ``` ### 实战建议 > ▎ 我给你指了路,走不走是你的事。机会给了,抓不抓得住看你。 **入门建议**: ``` 1. 使用模板 - 标准需求模板 - 验收标准模板 - 降低门槛 2. 从小开始 - 关键需求先行 - 逐步完善 - 快速见效 3. 建立库 - 需求模式库 - 最佳实践库 - 提高效率 ``` **进阶建议**: ``` 1. 自动化 - 需求管理工具 - 自动化验证 - 持续跟踪 2. 度量改进 - 需求质量度量 - 变更频率分析 - 持续改进 3. 能力建设 - 需求分析师培养 - 团队能力提升 - 组织级能力 ``` --- ## 参考资料 ### 学习资源 ``` - IEEE 29148 (Requirements Engineering) https://www.ieee.org/ - NIST SP 800-160 (Systems Security Engineering) https://csrc.nist.gov/publications/detail/sp/800-160 - OWASP Security Requirements https://owasp.org/www-project-security-requirements/ ``` ### 工具资源 ``` - Jira (需求管理) https://www.atlassian.com/software/jira - Confluence (需求文档) https://www.atlassian.com/software/confluence - Doors (企业级需求管理) https://www.ibm.com/products/doors ``` ### 标准规范 ``` - ISO/IEC/IEEE 29148 (Requirements Engineering) - NIST SP 800-160 Vol.1 (Systems Security Engineering) ``` ### 书籍推荐 ``` - 《Software Requirements》 - 《Mastering the Requirements Process》 - 《Security Requirements Engineering》 ``` --- **标记 明日预告**:Day 144 - 安全架构设计 > ▎ 安全需求是输入,安全架构是输出——明天看安全架构设计。 > 本文内容仅供学习和研究使用,请勿用于非法目的。所有实验请在隔离环境中进行。 --- *本文是 365 天信息安全技术系列的第 143 篇,应用安全部分第 36 篇,精编版本* *应用安全核心系列继续!*
myh0st
2026年4月13日 23:18
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码