我们生活在一个日益复杂的自由和开源软件生态系统FOSS中,它具有依赖性。在对一个中等规模的项目进行了一些分析之后,有1,500多个相关的软件包,不包括同一软件包的不同版本或内部开发的可重复使用的任何软件包。

我们如何在一个企业需要能够完全回答以下两个问题


我们是否已经满足了所使用的所有软件的许可条款?
我们接触到什么?免费软件或开源软件存在漏洞吗?

我可以想到两种支持这些问题的架构,但是,问题的严重性很可能使我的判断蒙上阴影:
<方法#1:围墙花园

有效地防火墙隔离这些开源软件包的源,例如npm,Docker Registry,nuget等,然后创建一个已批准软件包的内部存储库,实现一些流程将软件包列入白名单。



方法2:审核

允许从互联网上免费下载软件包,但是,将其作为构建管道的一部分执行源代码分析,以报告当前正在使用的软件包。



实际上,组织可以使用其中一种解决方案,或者在必要时使用两种解决方案来提供一定程度的制衡。

评论

尝试连续几个月在StackOverflow上关闭投票队列,您将完全知道如何写一个错误的问题-通过分散您可以避免所有陷阱。

#1 楼

任何需要您指定的控制级别的组织都会被强制进入预批准过程(“围墙花园”)。这对开发人员来说是一个痛苦,但这是确保公司安全的必要过程。我什至听说有公司会定期扫描所有工作站以查找和删除未经批准的软件。

值得注意的是,有几种方法可以实现它。如您所述,可以使用内部镜像。另一个流行的选择是将依赖关系供应到应用程序的存储库中。

安全性是冻结版本方法的主要问题之一,因为您已经承担了维护责任。通常,这意味着要让某个人负责跟踪已冻结的每个程序包的发行讨论。它还需要分配连续的时间来更新依赖关系,因为否则很容易会发现一个安全漏洞,该漏洞仅在与您的应用程序不兼容的版本中得到修复。通常会低估他们要为此更改进行的额外工作量,而严格的合规性实际上要比偶尔因许可或“消失的依赖关系”问题而导致的代价高得多。

#2 楼

有一些企业工具可以管理这些开源依赖关系,即具有Xray功能的Jfrog Artifactory和具有许可证过滤和漏洞扫描功能的Inedo ProGet。

基本上,您可以限制或允许下载软件包,以便公司可以制定政策以确保开发不会破坏使用权或使用易受攻击的组件构建应用程序。这些工具还具有本地缓存​​功能,因此,如果删除或编辑了依赖项(请单击左键),则开发不会受到影响。

__

免责声明,我的日常工作在Inedo :)