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