如何检查软件依赖包的安全性
citgpt 2024-10-01 19:42 10 浏览 0 评论
软件安全是任何产品的关键部分,但在时间和在国内特有的内卷压力下,它可能成为许多项目的次要考虑因素。仅仅提供可工作的软件是不够的;我们的交付也必须值得信赖,并针对已知漏洞提供保护。对于许多应用程序,成千上万甚至数百万个人信息 (PI) 记录的安全性——甚至整个公司网络——都取决于我们应用程序的安全性。
由于风险如此之大,我们必须在保护我们的产品免受漏洞攻击并赢得客户和用户的信任时进行尽职调查。
主要分享低代码、微服务、容器化、SAAS?、系统架构方面的的?内容??,希望?大家?点赞?,评论,关注?。
一般来说,漏洞可能来自我们的应用程序代码和依赖项。我们必须仔细考虑我们引入产品的依赖关系,并确保它们不会损害我们的应用程序。
保护软件依赖包安全性的 5 步清单
下面的清单详细说明了我们可以采取的五个简单但必不可少的步骤,以确保我们的软件是安全的,并且我们正在向我们的客户和用户提供最值得信赖的软件。
1. 积极主动
作为专业人士,我们有责任保护我们的产品。当我们发布产品时,我们会在产品上贴上我们的名字和批准印章。我们容易犯错,但是当我们向有漏洞的客户发布我们的产品并且不努力修复它们时,这对我们公司和我们自己都是不利的。
即使漏洞来自我们产品中包含的依赖项,我们仍然有责任修补我们的应用程序并消除漏洞。我们已决定使用这些依赖项,因此我们必须承担充分审查和升级这些依赖项的责任,尤其是在出现已知漏洞时。归根结底,如果我们的产品危及用户或客户的安全,责任在我们,我们必须在我们的职权范围内尽一切努力保护我们的用户和客户。
2.了解每一个依赖
我们在应用程序中包含的任何代码——甚至是我们的依赖项引入的传递依赖项——都可能危及我们的应用程序。因此,我们有责任枚举应用程序的依赖项。此枚举有时称为软件物料清单 (BOM),类似于制造业等更传统行业中的 BOM。
我们可以使用包管理器的命令行界面在我们的应用程序中找到所有依赖项(包括传递依赖项)的列表。例如:
- 行家 -mvn dependency:tree
- 摇篮 -gradle -q dependencies
- NPM——npm list --all
我们必须使我们的 BOM 保持最新,并与我们产品中包含的依赖项保持同步。确保这种一致性的最简单方法之一是生成我们的 BOM 作为我们自动构建管道中的一个步骤。每次我们构建应用程序时,我们的构建系统都会生成一个新的 BOM。当我们添加、更改或删除依赖项时,为每个构建生成的 BOM 将相应更新。
3.跟踪最新的漏洞
一旦我们知道我们的产品依赖什么,我们就必须跟踪这些依赖项的安全状态。及时了解安全公告和常见漏洞披露 (CVE) 系统可能会让人望而生畏,但我们可以使用一些资源来帮助我们。
以下是一些最常见的数据库,其中包含现有软件漏洞的最新列表:
- GitHub 咨询数据库
- 美国国家漏洞数据库
- MITRE CVE 数据库
4.自动化流程
即使对于最微不足道的项目,密切关注我们的依赖项并使用安全公告交叉引用它们也可能会让人不知所措。我们应该尽可能地自动化这些安全步骤,并且我们的构建管道应该在每次构建我们的产品时运行它们。只要有可能,我们还应该利用我们已经可用的工具。
例如,如果我们在GitHub上托管我们的应用程序,我们可以使用Dependabot,如果我们在GitLab上托管我们的应用程序,我们可以使用依赖扫描。
5.审计依赖
我们产品中的每个依赖项都会带来一系列漏洞。即使是最普遍的依赖项,如 log4j,也可能受到损害(请参阅Log4Shell)。因此,我们应该始终对我们的依赖项采用极简主义的方法。如果一个依赖没有被使用,我们应该立即移除它,如果一个依赖带来的安全风险超过了它的回报,我们必须找到一个替代方案。查找未使用的依赖项并为此类依赖项生成警告通常可以自动执行(例如,mvn dependency:analyze对于 Maven),并且应该作为构建管道中的一个步骤添加。
结论
我们对我们交付的产品的安全负责,即使漏洞来自我们依赖包中的依赖项。我们的客户和用户对我们产品的信任取决于我们在发现和修补代码和依赖包中的漏洞方面的努力。保持专业的心态、了解我们的风险、跟踪最新的漏洞、自动化我们的流程以及审核我们的产品,对于确保我们的产品符合最高安全标准并保护我们用户的数据和系统大有帮助。
主要分享低代码、微服务、容器化、SAAS?、系统架构方面的的?内容??,希望?大家?点赞?,评论,关注?。
- 上一篇:npm包管理
- 下一篇:如何查看npm,yarn全局安装的包
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)