代码质量与安全 | 开发人员必备的安全编码实践指南

news2024/11/27 19:54:03

在这里插入图片描述

在任何新的软件开发项目开始时,您就应该考虑软件安全。开始一个新项目或许会令人望而生畏,因为有许多的决定要做,有许多想法必须考虑清楚。通常来说,这些决定和想法包括了定义项目需求、选择正确的流程、选择正确的工具以及确保软件安全。

为此,Perforce提供了一个循序渐进的分步指南,引导您完成一个新项目中最耗时和最困难的挑战,帮助您的项目获得成功。

开发安全软件所需的安全编码实践

一个安全的软件开发最佳实践可以简单地分为以下四个主要部分:

  1. 了解您的项目需求;
  2. 定义您的软件开发流程;
  3. 为您的项目选择合适的工具;
  4. 设置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;
  • 随时报告不同产品版本的合规性。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QML- 导入库包语法

QML- 导入库包语法一、概述二、Import语句的语法1. Module (namespace) 模块(命名空间)导入1. 非模块命名空间的导入2. 导入到限定局部命名空间2. 路径 import1. 本地目录导入2. 远程目录3. JavaScript资源导入三、QML导入路径四、调试一、概述 import 语句其实在QML文档里面体…

Springboot扩展点之SmartInstantiationAwareBeanPostProcessor

前言这是Springboot扩展点系列的第5篇了,主要介绍一下SmartInstantiationAwareBeanPostProcessor扩展点的功能特性、和实现方式。SmartInstantiationAwareBeanPostProcessor与其他扩展点最明显的不同,就是在实际的业务开发场景中应用到的机会并不多&…

机器学习框架sklearn之特征降维

目录特征降维概念特征选择过滤式①低方差特征过滤②相关系数③主成分分析特征降维 0维 标量 1维 向量 2维 矩阵 概念 降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程 注:正是…

微信小程序 java 医生预约挂号答疑问询系统

生预约答疑系统用户端是基于微信小程序端,医生和管理员是基于网页后端。本系统分为用户,管理员,医生三个角色,用户的主要功能是注册登陆小程序,查看新闻资讯,查看医生列表,预约医生,…

【unity细节】关于资源商店(Package Maneger)无法下载资源问题的解决

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐关于资源商店为何下载不了的问题⭐ 文章目录⭐关于资源商店为何下载不了的问题…

鸟哥的Linux私房菜读书笔记:文件系统的简单操作

磁盘与目录的容量 现在我们知道磁盘的整体数据实在superblock区块中,但是每个个别文件的容量则在inode当中记载的. 那在命令行下面该如何显示处这几个数据呢? df:列出文件系统的整体磁盘书用量du:评估文件系统的磁盘使用量(常用在推估目录所占容量)df先来说明一下范例一所输…

网络协议(四):网络互联模型、物理层、数据链路层

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络互联模型、物理层、数据链路层 目录一、网…

HER2靶向药物研发进展-销售数据-上市药品前景分析

HER2长期作为肿瘤领域的热门靶点之一,其原因是它在多部位、多种形式的癌症中均有异常的表达,据研究表明HER2除了在胃癌、胆道癌、胆管癌、乳腺癌、卵巢癌、结肠癌、膀胱癌、肺癌、子宫颈癌、子宫浆液性子宫内膜癌、头颈癌、食道癌中的异常表达还存在于多…

从0到0.1学习 maven(三:声明周期、插件、聚合与继承)

该文章为maven系列学习的第三篇,也是最后一篇 第一篇快速入口:从0到0.1学习 maven(一:概述及简单入门) 第二篇快速入口:从0到0.1学习 maven(二:坐标、依赖和仓库) 文章目录啥子叫生命周期生命周期详解clean生命周期def…

统计检验(一)// 方差分析

【应用案例】 检验不同组(即不同收入者)是否存在“品类满意度”显著差异。各组的满足度平均值如下: 【操作步骤】 方差分析的前提条件是各组总体方差没有显著差异。 第一步:方差同质性检验 原假设:没有差异。 结论…

接口测试入门,如何划分接口文档

1.首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…

时间复杂度的计算(2023-02-10)

时间复杂度的计算 时间复杂度的计算分为三大类&#xff1a;一层循环、二层循环和多层循环。 一层循环 1.找出循环趟数t及每轮循环i的变化值 2.确立循环停止的条件 3.得出t与i之间的关系 4.联立两式&#xff0c;得出结果 eg: void fun(int n) {int i0;while (i*i*i<n)i;…

LeetCode刷题模版:292、295、297、299-301、303、304、309、310

目录 简介292. Nim 游戏295. 数据流的中位数297. 二叉树的序列化与反序列化【未理解】299. 猜数字游戏300. 最长递增子序列301. 删除无效的括号【未理解】303. 区域和检索 - 数组不可变304. 二维区域和检索 - 矩阵不可变309. 最佳买卖股票时机含冷冻期310. 最小高度树【未理解】…

测试开发,测试架构师为什么能拿50 60k呢需要掌握哪些技能呢

这篇文章是软件工程系列知识总结的第五篇&#xff0c;同样我会以自己的理解来阐述软件工程中关于架构设计相关的知识。相比于我们常见的研发架构师&#xff0c;测试架构师是近几年才出现的一个岗位&#xff0c;当然岗位title其实没有特殊的含义&#xff0c;在我看来测试架构师其…

产业互联网是对互联网的衍生和进化,也是一次重塑和再造

互联网并不仅仅只是充当撮合和中介的角色&#xff0c;它应当具备更多的功能和意义。只有这样&#xff0c;它的发展才能够真正全面和完善。产业互联网的衍生和出现&#xff0c;正是在互联网进化的基础之上出现的。这是我们看到之所以会有那么多的互联网玩家投身到产业互联网的浪…

FITC-PEG-FA,荧光素-聚乙二醇-叶酸,FA-PEG-FITC,实验室科研试剂,提供质量检测

FITC-PEG-FA&#xff0c;荧光素-聚乙二醇-叶酸 中文名称&#xff1a;荧光素-聚乙二醇-叶酸 英文名称&#xff1a;FITC-PEG-FA 英文别名&#xff1a;Fluorescein-PEG-Folic Acid 性状&#xff1a;基于不同的分子量&#xff0c;呈白色/类白色固体&#xff0c;或粘稠液体。 溶…

第九节 使用设备树实现RGB 灯驱动

通过上一小节的学习&#xff0c;我们已经能够编写简单的设备树节点&#xff0c;并且使用常用的of 函数从设备树中获取我们想要的节点资源。这一小节我们带领大家使用设备树编写一个简单的RGB 灯驱动程序&#xff0c;加深对设备树的理解。 实验说明 本节实验使用到STM32MP1 开…

使用gitlab ci/cd来发布一个.net 项目

gitlab runner的安装和基本使用:https://bear-coding.blog.csdn.net/article/details/120591711安装并给项目配置完gitlab runner后再操作后面步骤。实现目标&#xff1a;master分支代码有变更的时候自动构建build。当开发人员在gitlab上给项目打一个tag标签分支的时候自动触发…

4.5.4 LinkedList

文章目录1.特点2.常用方法3.练习:LinkedList测试1.特点 链表,两端效率高,底层就是链表实现的 List接口的实现类&#xff0c;底层的数据结构为链表&#xff0c;内存空间是不连续的 元素有下标&#xff0c;有序允许存放重复的元素在数据量较大的情况下&#xff0c;查询慢&am…

代码随想录NO39 |0-1背包问题理论基础 416.分割等和子集

0-1背包问题理论基础 分割等和子集1. 0-1背包问题理论基础(二维数组实现)2. 0-1背包问题理论基础 二&#xff08;一维数组实现&#xff09;1. 0-1背包问题理论基础(二维数组实现) 背包问题一般分为这几种&#xff1a; 0-1背包问题&#xff1a;有n件物品和一个最多能背重量为w…