Udostępnij przez


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

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

Uwaga / Notatka

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.

Zmień opis

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ć NotSupportedException, chyba że aplikacja internetowa ponownie włączyła funkcjonalność BinaryFormatter.

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

Wersja wprowadzona

5,0

Przyczyna zmiany

Te metody są oznaczone jako przestarzałe w ramach wysiłku mającego na celu zmniejszenie użycia BinaryFormatter w ekosystemie .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 stłumienia ostrzeżeń jest otaczanie miejsc 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 czynności, zobacz Rozwiązywanie błędów przestarzałości i błędów wyłączania BinaryFormatter.

Interfejsy API, których dotyczy problem

Zobacz także