Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf .NET 11 valideert de bibliotheek System.IO.Compression CRC32 controlesommen bij het lezen van ZIP-archiefvermeldingen. Als de berekende CRC32-controlesom niet overeenkomt met de verwachte waarde die is opgeslagen in de metagegevens van het ZIP-bestand, wordt er een InvalidDataException gegenereerd.
Geïntroduceerde versie
.NET 11 preview 3
Vorig gedrag
System.IO.Compression Voorheen werd CRC32-controlesommen niet gevalideerd bij het lezen van ZIP-archiefvermeldingen. Beschadigde of gemanipuleerde ZIP-vermeldingen kunnen zonder fouten worden gelezen, waardoor mogelijk stille gegevens beschadigd raken.
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);
Nieuw gedrag
Vanaf .NET 11 controleert de bibliotheek de integriteit van ZIP-vermeldingen tijdens leesbewerkingen. Als de berekende CRC32-controlesom niet overeenkomt met de verwachte waarde uit de metagegevens van het ZIP-bestand, wordt er een InvalidDataException gegenereerd.
Type van brekende verandering
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Deze wijziging verbetert de betrouwbaarheid en beveiliging van System.IO.Compression. Door CRC32-controlesommen te valideren, detecteert en voorkomt de bibliotheek het gebruik van beschadigde of gemanipuleerde ZIP-vermeldingen, zodat toepassingen niet per ongeluk ongeldige gegevens verwerken. Zie dotnet/runtime#124766 voor meer informatie.
Aanbevolen actie
Als uw toepassing ZIP-bestanden verwerkt die mogelijk beschadigd of gemanipuleerd zijn, moet u InvalidDataException op de juiste manier afhandelen.
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}");
}