Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab .NET 11 überprüft die System.IO.Compression-Bibliothek CRC32-Prüfsummen beim Lesen von ZIP-Archiveinträgen. Wenn die berechnete CRC32-Prüfsumme nicht mit dem erwarteten Wert übereinstimmt, der in den Metadaten der ZIP-Datei gespeichert ist, wird ein InvalidDataException Fehler ausgelöst.
Eingeführt in Version
.NET 11 Vorschau 3
Bisheriges Verhalten
Zuvor hat System.IO.Compression beim Lesen von ZIP-Archiv-Einträgen die CRC32-Prüfsummen nicht überprüft. Beschädigte oder manipulierte ZIP-Einträge können ohne Fehler gelesen werden, wodurch möglicherweise stille Datenbeschädigung verursacht wird.
using System.IO.Compression;
using var archive = ZipFile.OpenRead("corrupted.zip");
var entry = archive.GetEntry("file.txt")
?? throw new FileNotFoundException("Entry 'file.txt' not found in archive.");
using var stream = entry.Open();
// Data read without any validation of its integrity.
byte[] buffer = new byte[entry.Length];
stream.ReadExactly(buffer);
Neues Verhalten
Ab .NET 11 überprüft die Bibliothek die Integrität von ZIP-Einträgen während lesevorgängen. Wenn die berechnete CRC32-Prüfsumme nicht mit dem erwarteten Wert aus den Metadaten der ZIP-Datei übereinstimmt, wird ein InvalidDataException Fehler ausgelöst.
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Diese Änderung verbessert die Zuverlässigkeit und Sicherheit von System.IO.Compression. Durch die Überprüfung von CRC32-Prüfsummen erkennt und verhindert die Bibliothek die Verwendung beschädigter oder manipulierter ZIP-Einträge, wodurch sichergestellt wird, dass Anwendungen versehentlich ungültige Daten verarbeiten. Weitere Informationen finden Sie unter dotnet/runtime#124766.
Empfohlene Maßnahme
Wenn Ihre Anwendung ZIP-Dateien verarbeitet, die beschädigt oder manipuliert werden können, behandeln Sie InvalidDataException dies entsprechend:
try
{
using var archive = ZipFile.OpenRead("corrupted.zip");
var entry = archive.GetEntry("file.txt")
?? throw new FileNotFoundException("Entry 'file.txt' not found in archive.");
using var stream = entry.Open();
byte[] buffer = new byte[entry.Length];
stream.ReadExactly(buffer);
}
catch (InvalidDataException ex)
{
Console.WriteLine($"Error reading ZIP entry: {ex.Message}");
}