Udostępnij za pośrednictwem


Metody serializacji BinaryFormatter są przestarzałe i zabronione w aplikacjach ASP.NET

Serialize metody i Deserialize w systemach BinaryFormatter, Formatteri IFormatter są teraz przestarzałe jako ostrzeżenie. BinaryFormatter Ponadto serializacja jest domyślnie zabroniona dla ASP.NET aplikacji.

Uwaga

Na platformie .NET 7 interfejsy API, których dotyczy problem, są przestarzałe jako błąd. Aby uzyskać więcej informacji, zobacz Interfejsy API serializacji BinaryFormatter generują błędy kompilatora.

Opis zmiany

Ze względu na luki w zabezpieczeniach w systemie BinaryFormatternastępujące metody są teraz przestarzałe i generują ostrzeżenie dotyczące czasu kompilacji z identyfikatorem SYSLIB0011. Ponadto w aplikacjach ASP.NET Core 5.0 i nowszych będą zgłaszać wyjątek NotSupportedException, chyba że aplikacja internetowa ma ponownie włączoną BinaryFormatter funkcjonalność.

Następujące metody serializacji są również przestarzałe i generują ostrzeżenie SYSLIB0011, ale nie mają zmian behawioralnych:

Wprowadzona wersja

5,0

Przyczyna wprowadzenia zmiany

Te metody są oznaczone jako przestarzałe w ramach wysiłku w celu likwidacji BinaryFormatter użycia w ekosystemie platformy .NET.

  • Przestań używać BinaryFormatter w kodzie. Zamiast tego rozważ użycie metody JsonSerializer lub XmlSerializer. Aby uzyskać więcej informacji, zobacz BinaryFormatter security guide (Przewodnik po zabezpieczeniach usługi BinaryFormatter).

  • Możesz tymczasowo pominąć BinaryFormatter ostrzeżenie o czasie kompilacji, czyli SYSLIB0011. Zalecamy dokładną ocenę kodu pod kątem ryzyka przed wybraniem tej opcji. Najprostszym sposobem pomijania ostrzeżeń jest otaczanie poszczególnych lokacji wywołań dyrektywami #pragma .

    // Now read the purchase order back from disk
    using (var readStream = new FileStream("myfile.bin", FileMode.Open))
    {
        var formatter = new BinaryFormatter();
    #pragma warning disable SYSLIB0011
        return (PurchaseOrder)formatter.Deserialize(readStream);
    #pragma warning restore SYSLIB0011
    }
    

    Możesz również pominąć ostrzeżenie w pliku projektu.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "BinaryFormatter is obsolete" warnings for entire project -->
      <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
    </PropertyGroup>
    

    Jeśli pominięto ostrzeżenie w pliku projektu, ostrzeżenie zostanie pominięte dla wszystkich plików kodu w projekcie. Pomijanie SYSLIB0011 nie pomija ostrzeżeń spowodowanych użyciem innych przestarzałych interfejsów API.

  • Aby nadal korzystać BinaryFormatter z aplikacji ASP.NET, możesz ją ponownie włączyć w pliku projektu. Jednak zdecydowanie zaleca się, aby tego nie robić. Aby uzyskać więcej informacji, zobacz BinaryFormatter security guide (Przewodnik po zabezpieczeniach usługi BinaryFormatter).

    <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
      <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
    </PropertyGroup>
    

Aby uzyskać więcej informacji na temat zalecanych akcji, zobacz Rozwiązywanie błędów obsoletion binaryFormatter i wyłączanie.

Dotyczy interfejsów API

Zobacz też