关于安全防护:代码质量与安全-开发人员必备的安全编码实践指南

4次阅读

共计 3877 个字符,预计需要花费 10 分钟才能阅读完成。

在任何新的软件开发我的项目开始时,您就应该思考软件平安。开始一个新我的项目或者会令人望而却步,因为有许多的决定要做,有许多想法必须思考分明。通常来说,这些决定和想法包含了定义我的项目需要、抉择正确的流程、抉择正确的工具以及确保软件平安。

为此,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 利用艺术与技术学院的多媒体设计高级文凭。

文章起源:http://bit.ly/3jJCvy8

正文完
 0