需求
安全需求分析
风险评估要基于系统中的信息的价值、业务功能的价值、系统的潜在威胁、恶意攻击的可能性、系统的故障和被成功攻击的后果等情况进行评估。
关键目标识别
我们需要从安全角度进行系统的考虑,它是一个安全的软件开发生命周期过程中的一部分。
阅读:
设计
威胁模型
威胁建模是一个工程技术,可以帮助我们识别到系统中存在的相关威胁和漏洞,并帮助我们确定安全目标和确定相关的对策进行防范。
后面有时间,我会针对威胁建模进行大致的讲解。
开发
静态代码分析
静态代码分析的好处在于,测试可以完全自动化,使开发人员能够实现安全的编码实践,并在系统发布前,检查并修复存在风险的安全问题。
静态代码分析工具可以帮助开发人员快速查找和防止 SQL 注入、跨站脚本(XSS),跨站请求伪造(CSRF)和其他恶意攻击。
例如,Sonar (SonarQube)就是一个很好的工具。Sonar 是一个用于代码质量管理平台,管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
开发安全规范
网络安全
我们经常遇到 Web 攻击 和网络安全性问题。
阅读:
数据传输安全
当机密或敏感的数据在用户与 Web 服务器之间传递,可能存在数据的安全性问题。
阅读:
数据库安全
使用最小权限原则来访问数据库对象,例如表、视图、存储过程等。我举个实际的场景,如果我需要只读访问一个特定的数据库表,因此,数据库权限应该相应设置,而不是将我授予超级管理员权限。
此外,还需要注意数据库中机密或敏感数据的安全性,必要时候可以使用加密技术进行存储,例如针对密码采取MD5基础上的盐值加密。
代码审查
代码审查是计算机源代码的检查。它的目的是发现在最初的开发阶段忽略的错误,提高软件的整体质量。代码审查可以通过交叉编程,非正式的沟通,和正式检查。
阅读:
测试
安全测试
安全测试是在相同测试环境和预生产环境进行全面测试,尽可能模拟相应的生产环境。这包括硬件,软件,系统配置,控制和任何其他硬件。
在测试过程中,包括回归测试,必须证明所有的安全控制已经适当应用,正确实现,并且工作正常,消灭所预期的威胁和漏洞。
测试过程中还必须包括漏洞测试,并把该系统投入使用之前表现出严重漏洞的修复。
部署
安全评估
安全评估是每一家公司软件开发生命周期的重要组成部分。专家组对系统进行安全评估,分析安全问题,提供评估报告。
这个部分我们经常忽略,之前我参与的一个产品对安全性要求很高,还进行了多轮安全评估。
总结
我们来回顾下,上面讲到的内容。
需求阶段,我们重点要进行安全需求分析和关键目标识别。
设计阶段,我们可以采取威胁建模的方式,帮助我们确定安全目标和确定相关的对策进行防范。
开发阶段,我们采取静态代码分析、开发安全规范的方式,在系统发布前,检查并修复存在风险的安全问题。
测试阶段,不仅要进行功能测试、性能测试,还要考虑安全测试,消灭所预期的威胁和漏洞。
部署阶段,还需要安全评估。