OpenSSF发布npm 最佳实践指南,应对开源依赖风险
开源安全基金会(OpenSSF)发布了 npm 最佳实践指南,以帮助 JavaScript 和 TypeScript 开发人员降低使用开源依赖项相关的安全风险。OpenSSF Best Practice Group 发布的 npm 最佳实践指南,重点关注 npm 的依赖管理和供应链安全,涵盖各个领域,例如如何设置安全的 CI 配置、如何避免依赖混淆以及如何应对劫持依赖导致的后果。随着开发人员越来越多地共享和使用依赖项,依赖项在促进更快地开发和创新的同时,带来的风险也随之增加。
开源依赖项可能带来重大安全风险
OpenSSF 的贡献者表示,虽然看起来使用开源依赖项的好处远大于其坏处,但依赖项导致的安全风险可能很大,大到有些企业(尤其是中小型企业)甚至无力承受。此外,和任何其它软件一样,依赖项可能存在漏洞或被劫持的可能,这将会在很大程度上影响使用其的项目。
同时,Linux 基金会开源供应链安全主管 David A. Wheeler 强调,相比使用依赖项本身带来的安全风险,开发人员使用开源依赖项带来的最大安全风险是低估了直接和间接依赖项中的漏洞可能产生的影响。 不可否认的是任何软件都可能出现缺陷,如果使用不慎,可能会严重影响相关的软件供应链。然而很多时候,大部分依赖项都是不可见的,因此对应的安全风险更大。但缓解开源依赖项风险的解决方案并不是停止使用软件,而是智慧地使用软件,并为发现漏洞及时更新组件做好充分的准备。
当然,制定一套有效的依赖安全管理策略是十分具有挑战性的,因为这其中涉及的问题并非开发人员所熟悉的解决方案。而 npm 最佳实践指南能够为开发人员及其组织在面临此类问题时提供帮助,让他们能够更从容、更安全地使用和管理开源依赖项。指南概述了 npm 可用的供应链安全功能,描述了与使用依赖项相关的风险,并提出在不同项目阶段降低风险的建议。
解决开源风险的依赖管理要点
npm 最佳实践指南主要侧重于依赖管理,其中详细介绍了开发人员能够采取的一些帮助减少潜在威胁的步骤。例如在指南中明确提出,使用依赖项的第一步是研究其来源、可信度和安全状况。同时,指南还特别指出开发人员需要提防域名仿冒攻击,比如有时攻击者会创建一个看起来像官方的软件包名称来诱导用户安装恶意软件包,那么这时开发人员就需要通过识别软件包的 GitHub 存储库,并且评估其可信度(参考贡献者数量,星级等)。
同时指南还强调,在确定感兴趣的 GitHub 项目后,开发人员应当确定相应包的名称,并使用 OpenSSF Security Scorecards来了解依赖项当前的安全状况。同时,开发人员还应当使用 deps.dev 了解传递依赖项的安全状况,并使用 npm-audit了解项目依赖项中现有的漏洞。
在此指南中也提到可重复安装(Reproducible installation)能够为企业提供安全优势,因为它能够确保每次安装软件包时都使用准确的依赖项副本,在依赖项存在漏洞时快速识别潜在的网络危害、缓解恶意依赖项等威胁,以及检测包损坏。
与此同时,指南中还提到开发人员还应当使用锁定文件,该文件使用加密哈希(cryptographic hashes)实现哈希固定(hash pinning)。哈希固定通知包管理器(package manager)每个依赖项的预期哈希,而不是信任镜像仓库。然后,包管理器在每次安装期间验证每个依赖项的 hash 是否保持不变。任何对依赖项的恶意更改都会被检测到并被拒绝。
需要注意的是,依赖关系的持续维护也很重要,开发人员需要定期更新,以配合新漏洞密钥的披露和修补。为了管理企业的依赖关系,建议使用 dependabot 或 renovatebot 等工具。这些工具提交合并请求,开发人员可以查看这些请求并将其合并到默认分支中。此外,如果要删除依赖项,开发人员应当定期运行 npm-prune 并提交合并请求。
参考链接:
https://openssf.org/blog/2022/09/01/npm-best-practices-for-the-supply-chain/
OpenSSF发布npm 最佳实践指南,应对开源依赖风险的更多相关文章
- 如何让HTTPS站点评级达到A+? 还得看这篇HTTPS安全优化配置最佳实践指南
0x00 前言简述 SSL/TLS 简单说明 描述: 当下越来越多的网站管理员为企业站点或自己的站点进行了SSL/TLS配置, SSL/TLS 是一种简单易懂的技术,它很容易部署及运行,但要对其进行安 ...
- ASP.NET Core Web API 最佳实践指南
原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...
- [转]ASP.NET Core Web API 最佳实践指南
原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 转自 介绍# 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但 ...
- Python编程之美:最佳实践指南PDF高清完整版免费下载|百度云盘|Python新手到进阶
百度云盘:Python编程之美:最佳实践指南PDF高清完整版免费下载 提取码:1py6 内容简介 <Python编程之美:最佳实践指南>是Python用户的一本百科式学习指南,由Pytho ...
- Python 最佳实践指南 2018 学习笔记
基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...
- 转载:Google 官方应用架构的最佳实践指南 赞👍
官方给的实践指南,很有实际的指导意义, 特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...
- PYTHON 最佳实践指南(转)
add by zhj: 本文参考了The Hitchhiker's Guide to Python,当然也加入了作者的一些东西.The Hitchhiker's Guide to Python 的gi ...
- Android最佳实践指南
Updated on 2016/1/6 修正了一些翻译段落欢迎转载,但请保留译者链接:http://www.jianshu.com/p/613d28a3c8a0 Lessons learned fro ...
- Redis 混合存储最佳实践指南
Redis 混合存储实例是阿里云自主研发的兼容Redis协议和特性的云数据库产品,混合存储实例突破 Redis 数据必须全部存储到内存的限制,使用磁盘存储全量数据,并将热数据缓存到内存,实现访问性能与 ...
- HTTPS安全加固配置最佳实践指南
转载自:https://www.bilibili.com/read/cv16067729?spm_id_from=333.999.0.0 0x02 HTTPS安全加固指南 描述: 当你的网站上了 HT ...
随机推荐
- P5445 [APIO2019] 路灯 题解
题目链接 题目描述 给你一个 01 串,有 \(q\) 个时刻,每个时刻要么把一位取反,要么问你在过去的所有时刻中有多少个时刻 \(a\) 和 \(b-1\) 之间都为 1. 题目分析 观察题目,我们 ...
- JUC并发编程学习笔记(十二)Stream流式计算
Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合.MySql这些的本质都是存储东西的: 计算都应该交给流来操作! 一个案例说明:函数式接口.lambda表达式.链式编程.St ...
- 神经网络基础篇:Python 中的广播(Broadcasting in Python)
Python 中的广播 这是一个不同食物(每100g)中不同营养成分的卡路里含量表格,表格为3行4列,列表示不同的食物种类,从左至右依次为苹果,牛肉,鸡蛋,土豆.行表示不同的营养成分,从上到下依次为碳 ...
- 微盟&致远OA&聚水潭&YonSuite系统对接集成整体解决方案
前言:大部分的企业都可能只用一套系统组织架构复杂,业务流程繁琐,内部同时有OA系统.BI系统.ERP系统......且各个系统都需要独立登陆,造成IT部门数据监管困难!如何在同一套中台系统上关联多管理 ...
- 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)
接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面 首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那么这些都有什么含 ...
- Echarts图表基本参数设置说明
ECharts 是一款强大的数据可视化库,可以通过 JavaScript 构建交互式和动态的图表.在使用 ECharts 进行图表绘制时,我们可以通过设置各种参数来达到我们想要的效果.下面是对 ECh ...
- 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
引言 哈喽.大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.net mvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery ...
- 为什么要重写equals()?
为什么要重写equals()? Equals和 == 的区别: ==:是个运算符, 判断是否相等,基本数据类型进行判断 也可判断两个对象相等,比较两个对象的哈希码值 Equals:是个Object类的 ...
- 文心一言 VS 讯飞星火 VS chatgpt (170)-- 算法导论13.2 3题
三.用go语言,设在图 13-2 左边一棵树中,a.b和c 分别为子树a.β和γ中的任意结点.当结点 x 左旋之后,a.b和c 的深度会如何变化? 文心一言: 在二叉树中,左旋操作是改变节点的子节点顺 ...
- 一个WPF版的Layui前端UI库
前言 相信做.NET后端开发的很多小伙伴都用过Layui前端UI组件库,今天我们分享一个WPF版的Layui前端UI样式库:Layui-WPF. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于 ...