文章目录

  1. 1. 需求
    1. 1.1. 安全需求分析
    2. 1.2. 关键目标识别
  2. 2. 设计
    1. 2.1. 威胁模型
  3. 3. 开发
    1. 3.1. 静态代码分析
    2. 3.2. 开发安全规范
      1. 3.2.1. 网络安全
      2. 3.2.2. 数据传输安全
      3. 3.2.3. 数据库安全
      4. 3.2.4. 代码审查
  4. 4. 测试
    1. 4.1. 安全测试
  5. 5. 部署
    1. 5.1. 安全评估
  6. 6. 总结

今天,我们来讨论下安全的软件开发生命周期。

需求

安全需求分析

风险评估要基于系统中的信息的价值、业务功能的价值、系统的潜在威胁、恶意攻击的可能性、系统的故障和被成功攻击的后果等情况进行评估。

关键目标识别

我们需要从安全角度进行系统的考虑,它是一个安全的软件开发生命周期过程中的一部分。

阅读:

设计

威胁模型

威胁建模是一个工程技术,可以帮助我们识别到系统中存在的相关威胁和漏洞,并帮助我们确定安全目标和确定相关的对策进行防范。

后面有时间,我会针对威胁建模进行大致的讲解。

开发

静态代码分析

静态代码分析的好处在于,测试可以完全自动化,使开发人员能够实现安全的编码实践,并在系统发布前,检查并修复存在风险的安全问题。

静态代码分析工具可以帮助开发人员快速查找和防止 SQL 注入、跨站脚本(XSS),跨站请求伪造(CSRF)和其他恶意攻击。

例如,Sonar (SonarQube)就是一个很好的工具。Sonar 是一个用于代码质量管理平台,管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。

开发安全规范

网络安全

我们经常遇到 Web 攻击 和网络安全性问题。

阅读:

数据传输安全

当机密或敏感的数据在用户与 Web 服务器之间传递,可能存在数据的安全性问题。

阅读:

数据库安全

使用最小权限原则来访问数据库对象,例如表、视图、存储过程等。我举个实际的场景,如果我需要只读访问一个特定的数据库表,因此,数据库权限应该相应设置,而不是将我授予超级管理员权限。

此外,还需要注意数据库中机密或敏感数据的安全性,必要时候可以使用加密技术进行存储,例如针对密码采取MD5基础上的盐值加密。

代码审查

代码审查是计算机源代码的检查。它的目的是发现在最初的开发阶段忽略的错误,提高软件的整体质量。代码审查可以通过交叉编程,非正式的沟通,和正式检查。

阅读:

测试

安全测试

安全测试是在相同测试环境和预生产环境进行全面测试,尽可能模拟相应的生产环境。这包括硬件,软件,系统配置,控制和任何其他硬件。

在测试过程中,包括回归测试,必须证明所有的安全控制已经适当应用,正确实现,并且工作正常,消灭所预期的威胁和漏洞。

测试过程中还必须包括漏洞测试,并把该系统投入使用之前表现出严重漏洞的修复。

部署

安全评估

安全评估是每一家公司软件开发生命周期的重要组成部分。专家组对系统进行安全评估,分析安全问题,提供评估报告。

这个部分我们经常忽略,之前我参与的一个产品对安全性要求很高,还进行了多轮安全评估。

总结

我们来回顾下,上面讲到的内容。

  • 需求阶段,我们重点要进行安全需求分析和关键目标识别。
  • 设计阶段,我们可以采取威胁建模的方式,帮助我们确定安全目标和确定相关的对策进行防范。
  • 开发阶段,我们采取静态代码分析、开发安全规范的方式,在系统发布前,检查并修复存在风险的安全问题。
  • 测试阶段,不仅要进行功能测试、性能测试,还要考虑安全测试,消灭所预期的威胁和漏洞。
  • 部署阶段,还需要安全评估。
(完)

微信公众号

文章目录

  1. 1. 需求
    1. 1.1. 安全需求分析
    2. 1.2. 关键目标识别
  2. 2. 设计
    1. 2.1. 威胁模型
  3. 3. 开发
    1. 3.1. 静态代码分析
    2. 3.2. 开发安全规范
      1. 3.2.1. 网络安全
      2. 3.2.2. 数据传输安全
      3. 3.2.3. 数据库安全
      4. 3.2.4. 代码审查
  4. 4. 测试
    1. 4.1. 安全测试
  5. 5. 部署
    1. 5.1. 安全评估
  6. 6. 总结