繁体   English   中英

如何解决(疑似)过时的外部 package 依赖项?

[英]How to address (suspected) outdated external package dependencies?

我们有一个 .Net Core 6.0 解决方案,其中两个项目将 NuGet package 引用设置为Azure.Storage.Blobs 12.14.1 (撰写本文时的最新版本):

<ItemGroup>
   <PackageReference Include="Azure.Storage.Blobs" Version="12.14.1" />
</ItemGroup>

今天,IT 正在测试的一种新的安全扫描工具标记了一个“关键”问题:

System.Text.Encodings.Web 远程代码执行 (RCE) CVE-2021-26701 CVSS 9.8 严重

Introduced through: project › Azure.Storage.Blobs 12.14.1 › System.Text.Json 4.7.2 › System.Text.Encodings.Web 4.7.1

我查看了nuget.org 页面中的Azure.Storage.Blobs ,它显示了System.Text.Json (>= 4.7.2) ,这暗示我(可能是错误的)Blob 应该可以与更高版本的 Encodings.Web 一起工作:

在此处输入图像描述

我只引用Azure.Storage.Blobs ,这是否意味着Azure.Storage.Blobs本身引用了一个过时的 package?

当不直接使用嵌套包时,我很想避免创建自己对嵌套包的依赖。 我的研究表明 NPM 可以解决这些问题,但我一直无法找到基于 NuGet 的解决方案。

谁能解释一下确保我的依赖关系在这里保持安全的解决方案是什么?

中央 package 管理提供了一种称为传递固定的功能来管理传递/间接依赖项(的版本),而不是使它们成为直接依赖项。

从文档

从 NuGet 6.2 开始,您可以通过添加Directory.Packages.props文件和 MSBuild 属性集中管理项目中的依赖项。

您可以通过选择一种称为传递固定的功能来自动覆盖传递 package 版本,即使没有明确的顶级版本。 这会在必要时代表您隐式地将传递依赖提升为顶级依赖。


首先启用中央 package 管理

Directory.Packages.props文件添加到例如您存储库的根目录(靠近您的.sln文件)。

ManagePackageVersionsCentrally设置为true

<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>

使用PackageVersion标签包含任何直接的 NuGet 包; 请注意与PackageReference标签的区别。


<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>    
  </PropertyGroup>  
  <ItemGroup>        
    <PackageVersion Include="Azure.Storage.Blobs" Version="12.14.1" />    
  </ItemGroup>
</Project>

通过从任何PackageReference标记中删除version指示来调整您的.csproj文件,因为这现在将集中管理,但如果需要您仍然可以覆盖

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>        
    <PackageReference Include="Azure.Storage.Blobs" />
  </ItemGroup>  
</Project>

接下来通过将ManagePackageVersionsCentrally设置为true启用传递固定

PropertyGroup中添加以下标签。

<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>

然后包含相关包。
在您的情况下,您可以将System.Text.JsonSystem.Text.Encodings.Web升级并固定到更高版本,例如:

<PackageVersion Include="System.Text.Json" Version="6.0.7" />

您需要弄清楚哪个版本适用于您的具体案例。


完整的Directory.Package.props示例。
传递依赖项不需要在单独的ItemGroup中,但它可能更有见地。

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> 
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>    
  </PropertyGroup>  
  <ItemGroup>        
    <PackageVersion Include="Azure.Storage.Blobs" Version="12.14.1" />    
  </ItemGroup>
  <!-- Transitive packages -->
  <ItemGroup> 
    <PackageVersion Include="System.Text.Json" Version="6.0.7" />  
  </ItemGroup>
</Project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM