[英]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.Json
或System.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.