Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net nuget restore是否可以防止名称欺骗?_.net_Security_Nuget - Fatal编程技术网

.net nuget restore是否可以防止名称欺骗?

.net nuget restore是否可以防止名称欺骗?,.net,security,nuget,.net,Security,Nuget,我们的团队使用内部nuget提要。然后,我们的.net核心项目使用包引用引用我们的内部包: <ItemGroup> <PackageReference Include="OurCompany.OurPackage" Version="1.01" /> </ItemGroup> 如果我的理解正确,nuget restore命令将通过查询开发人员机器上配置的所有nuget提要来尝试解析OurCompany.OurP

我们的团队使用内部nuget提要。然后,我们的.net核心项目使用包引用引用我们的内部包:

<ItemGroup>
  <PackageReference Include="OurCompany.OurPackage" Version="1.01" />
</ItemGroup>

如果我的理解正确,nuget restore命令将通过查询开发人员机器上配置的所有nuget提要来尝试解析
OurCompany.OurPackage
。这包括我们的内部nuget提要,但也包括其他nuget提要,如nuget.org(我们依赖它来获得一些外部依赖项)

.NET/nuget是否提供了一种安全机制,可以防止开发人员意外地从nuget.org下载名为
OurCompany.OurPackage
的恶意伪造软件包

注:2014年提出了类似的问题。然而,公认的答案相当陈旧,建议使用第三方产品作为nuget.org的代理。这个解决方案对我们来说似乎有点“重量级”,我们希望确保目前没有更简单的解决方案。

锁定文件 NuGet在2018年底为PackageReference引入了锁文件,之后为packages.config引入了锁文件。有一个关于PackageReference锁文件的公告,其中有一些关于如何使用它的信息,还有一些

它保护您的方式是,在生成锁文件时,NuGet获取包内容的散列并将其写入锁文件。在以后的恢复中,当使用相同的包版本时,如果下载包的内容哈希不匹配,NuGet将导致恢复失败并出现错误。在构建服务器上,您应该使用“锁定模式”,如果恢复图不同(选择了不同版本的包),则恢复也会失败

nuget.org前缀预订 org支持。是的。在过去,他们要求至少有一个软件包已经上传,我不确定是否仍然是这样。但是,如果您的公司在nuget.org上已经至少有一个公共包,那么您应该能够保留您公司的前缀,并阻止其他任何人使用该前缀发布。注意,它不会阻止您的nuget.org组织帐户中的人员意外地将内部包发布到nuget.org

聚合饲料 上面的锁定文件功能有一个影响深远的问题。当它检测到包含不同内容散列的包时,您就无法构建。NuGet不会尝试使用不同的源来查找具有预期哈希的包。您需要清除受影响计算机上的“全局程序包”文件夹,尽管您可以重试并希望具有正确程序包的专用源比具有坏程序包的另一个源响应更快,但它可能不可靠,或者如果具有坏程序包的源总是更快,您将被完全阻止(NuGet并行尝试所有http源,并从最快的源下载)

目前唯一的解决办法是更改您的软件包ID或版本,这样就不会与其他源发生冲突,或者按照链接的问题/答案的建议,使用聚合源。有一些可以做到这一点,有些是自托管的,有些是云托管的。如果您的公司有Azure DevOps帐户,Azure工件内置了此功能

通过将包发布到源中,可以确保始终使用包,并且只有当源中不存在包时,才会搜索上游源。只需确保已将生成配置为使用此源作为唯一源。另一个优点是,这可能会使NuGet restore更快速r、 一般来说,您拥有的源越少,恢复速度就越快。如前所述,NuGet在下载时使用的是最快的源,但有些操作(如果使用“浮动版本”,则始终如此)需要来自所有服务器的响应,因此只有一个源,如果您能确保它是快速的,这意味着您总是能够以最少的请求数获得快速的结果。

lock files NuGet在2018年底为PackageReference引入了锁文件,之后又为packages.config引入了锁文件。有一次会议宣布了PackageReference锁文件,并介绍了一些如何使用它的信息,还有一些

它保护您的方式是,在生成锁文件时,NuGet会获取包内容的哈希值并将其写入锁文件。在以后的还原中,当使用相同的包版本时,如果下载的包的内容哈希值不匹配,NuGet将导致还原失败并出现错误。在生成服务器上,您应该使用“锁定模式”,如果还原图不同(选择了不同版本的包),则还原也会失败

nuget.org前缀预订 nuget.org支持。它支持。过去,他们要求至少要上传一个包,我不确定是否仍然是这样。但是,如果你的公司在nuget.org上已经至少有一个公共包,那么你应该能够保留你公司的前缀,并阻止其他人使用该前缀发布。注意,这不会影响到你阻止nuget.org组织帐户中的人员意外将内部包发布到nuget.org

聚合饲料 上面的锁定文件功能有一个影响深远的问题。当它检测到具有不同内容哈希的包时,您将无法生成。NuGet不会尝试使用不同的源来查找具有预期哈希的包。您需要清除受影响计算机上的“全局包”文件夹,同时可以重试,并希望您的带有正确包的私有提要比带有坏包的另一个提要的响应速度更快,这可能不可靠,或者如果带有坏包的提要总是更快,您将被完全阻止(NuGet并行尝试所有http源,并从最快的源下载)

目前唯一的解决办法是更改您的包ID或版本,这样就不会再与其他源代码冲突,或者更改您的包ID或版本