Gemfury 是否防止依赖混淆?
Does Gemfury protect against dependency confusion?
鉴于 Alex Birsan 的启示,他能够 运行 通过依赖混淆在主要私营公司内部编写代码(将包上传到 public 与公司 private/internal 包,但版本号更高),Gemfury 是否对此有保护措施?
我知道混合索引有很长的路要走,因为如果适用,所有依赖项都将首先从 Gemfury 存储库中提取,但这是否包括版本检查?例如:如果我的 Gemfury 存储库包含版本为 1.1 的包 A,并且 public 存储库包含版本为 1.2 的包 A,并且我的 package.json 设置为拉取具有最高次要编号的包,那么 Gemfury 是智能的足以从我的本地仓库中提取 1.1 版,而不是从 public 仓库中提取 1.2 版?
答案取决于包管理器。对于在客户端进行多回购解析的包管理器,这将取决于包管理器的实现。对于一些,您可以明确指定每个依赖项的来源,这避免了 repo 混淆。鉴于 Alex Birsan 的启示,各个包管理器正在单独解决这个问题。
就 Gemfury 的 npm 和 Go 模块混合索引而言,混合是在包级别完成的,因此如果您的私人帐户中存在命名包,则只有私人版本才会显示给该包的客户端。这避免了 public 索引中的版本干扰私有包。
鉴于 Alex Birsan 的启示,他能够 运行 通过依赖混淆在主要私营公司内部编写代码(将包上传到 public 与公司 private/internal 包,但版本号更高),Gemfury 是否对此有保护措施?
我知道混合索引有很长的路要走,因为如果适用,所有依赖项都将首先从 Gemfury 存储库中提取,但这是否包括版本检查?例如:如果我的 Gemfury 存储库包含版本为 1.1 的包 A,并且 public 存储库包含版本为 1.2 的包 A,并且我的 package.json 设置为拉取具有最高次要编号的包,那么 Gemfury 是智能的足以从我的本地仓库中提取 1.1 版,而不是从 public 仓库中提取 1.2 版?
答案取决于包管理器。对于在客户端进行多回购解析的包管理器,这将取决于包管理器的实现。对于一些,您可以明确指定每个依赖项的来源,这避免了 repo 混淆。鉴于 Alex Birsan 的启示,各个包管理器正在单独解决这个问题。
就 Gemfury 的 npm 和 Go 模块混合索引而言,混合是在包级别完成的,因此如果您的私人帐户中存在命名包,则只有私人版本才会显示给该包的客户端。这避免了 public 索引中的版本干扰私有包。