簡體   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