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:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
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.
Zalecana akcja
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
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)