🔐 安全开发生命周期 (SDL) 解析

发布: (2026年1月20日 GMT+8 22:11)
4 min read
原文: Dev.to

Source: Dev.to

什么是安全开发生命周期(SDL)?

安全开发生命周期(SDL)是一种结构化的方法,将安全性嵌入软件开发的每个阶段,而不是在结束时才补上。
核心理念: 通过设计实现安全软件,而不是偶然实现。SDL 确保安全风险在早期被识别、持续降低,并在发布前得到验证。

阶段

阶段目标关键问题
规划定义安全期望会出现什么问题?
设计安全架构我们如何防止滥用?
开发编写安全代码我们的编码是否安全?
测试查找弱点我们遗漏了什么?
发布安全交付部署是否安全?
维护保持安全有哪些变化或破坏?

实际 DevOps 示例

场景

你正在构建面向客户的 Web 应用:

  • 前端: React
  • 后端: Java API
  • CI/CD: GitHub Actions
  • 云平台: AWS

活动

  • 识别敏感数据(PII、凭证)
  • 定义合规需求
  • 决定安全标准

示例: 应用存储用户邮箱和密码

决策

  • ✅ 必须对密码进行哈希处理
  • ✅ 强制使用 TLS
  • ✅ 不在 GitHub 仓库中存放密钥

识别的风险: 凭证泄露
缓解措施: 使用密钥管理器 + 哈希

威胁建模与安全架构

活动

  • 威胁建模
  • 安全架构设计
  • 定义信任边界

示例: API 公开暴露,数据库位于私有子网,使用基于 JWT 的认证

识别的威胁: 通过未认证请求滥用 API
缓解措施: 使用 OAuth2 + 限流 + API Gateway

安全编码标准

活动

  • 依赖管理
  • 静态代码分析

示例: 开发者提交 Java 代码;GitHub Action 运行 SAST 和依赖漏洞扫描

- name: Run security scan
  run: mvn verify

不良实践

String query = "SELECT * FROM users WHERE id=" + userId;

安全实践

PreparedStatement stmt = connection.prepareStatement(
  "SELECT * FROM users WHERE id = ?"
);

动态测试

活动

  • DAST
  • 渗透测试
  • 模糊测试

示例: 应用部署到预发布环境;自动扫描器检测到:

  • 漏洞: 搜索端点的 XSS
  • 严重程度:

在投产前已应用 修复

安全签署与基础设施加固

活动

  • 密钥验证
  • CI/CD 检查硬编码密钥、开放的安全组、缺失 HTTPS

发布被阻止,直至问题解决。

持续维护

活动

  • 修补依赖
  • 监控日志
  • 事件响应

示例: 某库出现新 CVE;GitHub Dependabot 提交 PR;在数小时内合并修补。

好处

好处影响
减少泄露事件🟢
降低修复成本🔵
提升合规性🟠
防止临时慌乱🔴

关键要点: SDL 将安全视为一种特性,而非缺陷。仅在部署后检查安全已经为时已晚;安全软件必须从一开始就进行设计。

Back to Blog

相关文章

阅读更多 »

动手实践:Amazon Personalize

!Amazon Personalize https://dev-to-uploads.s3.amazonaws.com/uploads/articles/16ui0v8xk3zc0lybrveg.png 简要概述 Amazon Personalize 使企业能够…