安全的软件开发生命周期
需求
安全需求分析
风险评估要基于系统中的信息的价值、业务功能的价值、系统的潜在威胁、恶意***的可能性、系统的故障和被成功***的后果等情况进行评估。
关键目标识别
我们需要从安全角度进行系统的考虑,它是一个安全的软件开发生命周期过程中的一部分。
阅读:
我们要考虑哪些安全问题「http://blog.720ui.com/2017/security_aspect/ 」
设计
威胁模型
威胁建模是一个工程技术,可以帮助我们识别到系统中存在的相关威胁和漏洞,并帮助我们确定安全目标和确定相关的对策进行防范。
后面有时间,我会针对威胁建模进行大致的讲解。
开发
静态代码分析
静态代码分析的好处在于,测试可以完全自动化,使开发人员能够实现安全的编码实践,并在系统发布前,检查并修复存在风险的安全问题。
静态代码分析工具可以帮助开发人员快速查找和防止 SQL 注入、跨站脚本(XSS),跨站请求伪造(CSRF)和其他恶意***。
例如,Sonar (SonarQube)就是一个很好的工具。Sonar 是一个用于代码质量管理平台,管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
开发安全规范
网络安全
我们经常遇到 Web *** 和网络安全性问题。
阅读:
如何防范常见的Web***「http://blog.720ui.com/2016/security_web/ 」
数据传输安全
当机密或敏感的数据在用户与 Web 服务器之间传递,可能存在数据的安全性问题。
阅读:
服务端通信安全***详解「http://blog.720ui.com/2016/security_data_transmission/ 」
HTTPS原理剖析与项目场景「http://blog.720ui.com/2016/security_https/ 」
数据库安全
使用最小权限原则来访问数据库对象,例如表、视图、存储过程等。我举个实际的场景,如果我需要只读访问一个特定的数据库表,因此,数据库权限应该相应设置,而不是将我授予超级管理员权限。
此外,还需要注意数据库中机密或敏感数据的安全性,必要时候可以使用加密技术进行存储,例如针对密码采取MD5基础上的盐值加密。
代码审查
代码审查是计算机源代码的检查。它的目的是发现在最初的开发阶段忽略的错误,提高软件的整体质量。代码审查可以通过交叉编程,非正式的沟通,和正式检查。
阅读:
提高服务端编码质量 - 预防BUG篇「http://blog.720ui.com/2016/bug-prevention/」
测试
安全测试
安全测试是在相同测试环境和预生产环境进行全面测试,尽可能模拟相应的生产环境。这包括硬件,软件,系统配置,控制和任何其他硬件。
在测试过程中,包括回归测试,必须证明所有的安全控制已经适当应用,正确实现,并且工作正常,消灭所预期的威胁和漏洞。
测试过程中还必须包括漏洞测试,并把该系统投入使用之前表现出严重漏洞的修复。
部署
安全评估
安全评估是每一家公司软件开发生命周期的重要组成部分。专家组对系统进行安全评估,分析安全问题,提供评估报告。
这个部分我们经常忽略,之前我参与的一个产品对安全性要求很高,还进行了多轮安全评估。
总结
我们来回顾下,上面讲到的内容。
需求阶段,我们重点要进行安全需求分析和关键目标识别。
设计阶段,我们可以采取威胁建模的方式,帮助我们确定安全目标和确定相关的对策进行防范。
开发阶段,我们采取静态代码分析、开发安全规范的方式,在系统发布前,检查并修复存在风险的安全问题。
测试阶段,不仅要进行功能测试、性能测试,还要考虑安全测试,消灭所预期的威胁和漏洞。
部署阶段,还需要安全评估。
更多相关文章
- Linux性能优化(一)——stress压力测试工具
- Linux性能优化(二)——sysbench压力测试工具
- 一段神奇的监视 DOM 的代码[每日前端夜话0xE4]
- SpringBoot结合MyBatis Plus 自动生成代码
- 10 行 Java 代码实现最近被使用( LRU )缓存
- Java 8 Lambda 表达式和流操作如何让你的代码变慢 5 倍
- 没用过这些IDEA插件?怪不得写代码头疼
- Java8 Lambda 表达式和流操作如何让你的代码变慢 5 倍
- 测试领域,小白问题大集合(适合未入门和入门初级者)