代码质量与安全 | 开发人员必备的安全编码实践指南
在任何新的软件开发项目开始时,您就应该考虑软件安全。开始一个新项目或许会令人望而生畏,因为有许多的决定要做,有许多想法必须考虑清楚。通常来说,这些决定和想法包括了定义项目需求、选择正确的流程、选择正确的工具以及确保软件安全。
为此,Perforce 提供了一个循序渐进的分步指南,引导您完成一个新项目中最耗时和最困难的挑战,帮助您的项目获得成功。
开发安全软件所需的安全编码实践
一个安全的软件开发最佳实践可以简单地分为以下四个主要部分:
了解您的项目需求;
定义您的软件开发流程;
为您的项目选择合适的工具;
设置 DevSecOps。
像 Perforce 公司的静态代码分析(SAST)工具 Klocwork 可以在每个部分帮助您满足推荐指南的要求。
了解您的项目需求
在项目开始时,有几个因素是需要您考虑的。通过审视这些因素,您能更好地了解项目需求。
项目概述
首先,您需要花时间了解项目本身,并提出有助于指导整个开发生命周期决策的问题。比如:
正在开发的是什么类型的项目?(嵌入式、云服务、前端/后端软件等。)
这个项目是针对哪个行业的?(汽车、航空航天、企业、医疗、金融等。)
该软件将如何使用,以及在什么环境下使用?(企业、中小企业、B2B、B2C 等。)
定义项目愿景
对应用程序将提供什么内容有一个构思,这有助于设定指导性的工作目标。通过制定一个针对客户问题、痛点以及应用程序将如何解决这些问题的明确说明,有助于确保您提供的解决方案是正确的。
确定合规性要求
你需要确保作为项目的一部分,行业、供应链、业务或客户需求是否存在代码合规性要求。
此外,您还需要确定需要什么级别的保障、安全或质量合规性。这可能包括以下编码标准:
CWE
CERT
CVE
OWASP
DISA-STIG
MISRA
AUTOSAR
从项目开始时就选择并遵循一个标准,就能减少未来将面对的合规性难题。
选择灵活的编程语言
确保您的编程语言(无论是 C、C++、C#、Java 还是 JavaScript)是最适合您的项目的。选择最合适的编码语言能为您带来以下好处:
易于开发;
代码的可维护性;
可以接触到熟练的开发人员;
明确的编码标准和最佳实践。
选择什么语言可以决定您的软件是否保持相互关联,以及保持生命力。
制定设计规范
花点时间来制定一个设计规范,这样您就能验证系统逻辑,确定所有组件是否能够正确地一起执行,并帮助确保软件安全。这可能就是成功的发行与代价巨大的重新设计之间的区别。
建立代码架构
规划出您的代码库,确保其井井有条。请务必考虑以下事项:
文件命名规则;
为项目定义模块;
层次和结构。
提前完成了这项工作,您就为开发人员提供了一个清晰的模板,让未来能更轻松地进行维护。
定义软件开发流程
虽然对于您的项目需求和要求来说,软件开发流程是独一无二的,但建议您考虑以下几点:
确定需要实施哪些软件安全最佳实践
根据行业的不同,您的开发项目可能需要遵循特定的最佳实践和标准。此时,您应该让项目要求与开发过程保持一致。这可能包括遵循功能安全标准(如 IEC 61508)和安全编码实践(如 CERT 或 CWE)。
像 Klocwork 这样的静态代码分析工具可以帮助您践行项目可能需要遵循的任何标准、最佳实践和条件。
统一开发方法
无论是敏捷或瀑布,Scrum 或看板,还是您目前采用的任何其他方法,这都无关紧要。重要的是,您要使开发过程与您的业务、开发人员和开发团队打算交付项目的方式保持一致。
统一方法的目的是为了有一个确保组织和沟通的过程,并帮助防止开发过程中出现的问题。
设置您的环境
一般来说,确定并创建项目所需的环境来确保整个团队使用相同的设置非常重要。最佳实践表明,应该为开发、用户验收测试(UAT)、预发和生产设置单独的环境。
使用存储库工具
使用版本控制工具(如 Perforce Helix Core)来建立源代码存储库,让您的开发团队能够:
减少处理工具和流程的时间;
避免在手动工作流程上浪费时间,使他们能够重新开始编码;
高效处理数以万计的文件以及 PB 级的数据;
将代码中更改的内容与更改原因联系起来。
除了代码存储库之外,您还应当考虑使用其他工具或流程来存储和跟踪其他与项目有关的内容。这包括:
将项目使用的工具和组件放在整个团队都唾手可得的地方;
为计划、文档和开发人员入职培训提供一个核心位置;
在项目管理软件(如 Helix ALM)或问题跟踪软件中定义工作任务。
通过建立这些存储库,您能确保您的开发高效、内容安全,并且知识易于获取,新开发人员能快速上手。
通过安全编码实践加强软件安全
通过遵循安全编码实践,在开发过程中构建安全执行,并使用安全编码工具帮助强制执行合规性。此外,您需要为团队提供安全培训和学习材料,发展安全文化。
将检查纳入开发流水线中
在整个开发流水线中实施安全检查,有助于强制执行良好的编码实践。在开发代码时,请务必时刻保持安全意识。建议您在开发人员的 IDE、CI/CD 流水线以及夜间集成构建期间使用 SAST 扫描。
出于测试和重构目的,请确保让开发人员编写单元测试,质量保证人员编写功能测试。请考虑所有可能的测试策略,并尽可能地创建并自动化安全和其他测试。
对您的项目任务和功能有一个“完成”的定义
即使任务或功能看起来已经完成了,并已经在开发人员桌面上编译了,也是不够的。你需要有一个明确的流程来定义工作——从头到尾。
最佳做法包括以下几点:
需求捕获;
工作范围;
定义验收标准;
为代码开发单元和功能测试用例;
进行同行代码评审;
对集成测试、安全测试以及直到最终环境测试的所有阶段进行自动化测试。
鼓励反馈和沟通
团队和开发人员之间的反馈和沟通对于项目能否成功起着关键性作用。
重要的是,让您的开发人员能够在代码提交后获得快速反馈,他们才能及早解决编码问题,并为其他相关人员提供有关项目进度、指标和潜在风险的信息。
除了自动化,为开发人员提供足够的时间进行代码审查、规划和回顾也非常重要。这些都将有助于确保高速开发,因为不会再有交流不畅的情况了。
为您的项目选择合适的工具
项目中还有一个重要部分是选择正确的工具。工具的选择很重要,因为它有助于将项目标准化,并使团队中的每个人都能“同频交流”。它从以下四个方面为整个团队带来了好处:
生产力;
形成共识;
测试和调试;
更易上手。
为了帮助确保为团队选择的工具集是最有效的,您需要考虑以下几点:
研究和查看所有工具选项,并根据项目和团队要求对其进行评估;
了解工具选择的成熟度以及有哪些类型的支持,如技术支持、帮助资源和主动维护;
考虑工具、团队的经验水平以及招聘新开发人员的能力将受到怎样的影响;
检查工具集之间的兼容性。
无论您选择哪种工具集,都建议它包括以下内容:
代码存储库和版本控制,用于跟踪和管理对源代码、数字资产和大型二进制文件的更改;
SCA 和 SAST 工具,用于强制执行安全编码实践,并识别缺陷、漏洞和合规性问题;
应用程序生命周期管理工具,在项目的整个应用程序生命周期管理中提供端到端的可追溯性。
为您的软件开发项目建立 DevSecOps
DevSecOps 是一项必不可少的软件安全最佳实践,它将 DevOps 的速度和规模与安全编码实践结合起来。通过采用 DevSecOps 方法,您可以:
尽可能多地自动化流程——安全、配置、管理、测试等,开发人员就能腾出时间专注于开发新的代码和功能;
定义成功/失败指标,并主动监控和报告项目结果。这有助于您更快地发现问题和漏洞,做出更明智的决策,并在整个应用程序中强制实施项目要求;
采取措施保护您的基础架构。安全性不仅对您的最终产品来说很重要,并且对您公司的程序和政策也很重要。确保您从整体上考虑安全性,并从上到下推进安全文化;
持续监控和执行软件安全合规性。将安全工具(如 SAST、DAST 和 SCA)集成到 DevSecOps 流水线中,以便在整个开发生命周期中主动跟踪和执行安全标准。
选择 Perforce 工具,确保软件安全性和项目成功
用于 C、C++、C#、Java、JavaScript、Python 和 Kotlin 的SAST工具Klocwork可以识别安全、质量和可靠性问题。这有助于强制遵守编码标准,确保代码免受安全漏洞的影响。Klocwork 的设计易于扩展到任何规模的项目,它为你提供了在编写代码时自动进行源代码分析的能力。
此外,Klocwork 的差异分析使您能够仅对已更改的文件进行快速的增量分析,同时提供相当于完整项目扫描的结果。这会帮助您缩短分析时间。
通过使用 Klocwork,您还能收获:
在开发早期发现代码漏洞、合规性问题和规则冲突。这有助于加快代码审查和手动测试工作;
执行行业和编码标准,包括 CWE、CERT、OWASP 和 DISA STIG;
随时报告不同产品版本的合规性。
作者简介:
斯图尔特·福斯特(Stuart Foster)
Klocwork 和 Helix QAC 产品经理,Perforce
斯图尔特·福斯特在移动和软件开发方面拥有超过 10 年的丰富经验,负责管理消费应用和企业软件的产品开发。目前,他负责管理 Klocwork 和 Helix QAC——Perforce 的代码质量管理解决方案。他致力于开发符合客户业务需求的产品、特性和功能,并帮助开发人员生成安全、可靠、无缺陷的代码。斯图尔特拥有 Carleton 大学的信息技术、交互式多媒体和设计学士学位,以及 Algonquin 应用艺术与技术学院的多媒体设计高级文凭。
评论