I metodi di serializzazione BinaryFormatter sono obsoleti e non sono consentiti nelle app ASP.NET
I metodi Serialize
e Deserialize
in BinaryFormatter, Formatter e IFormatter sono ora obsoleti come avviso. Inoltre, la serializzazione di BinaryFormatter non è consentita per impostazione predefinita per le app ASP.NET.
Nota
In .NET 7 le API interessate sono obsolete come errore. Per altre informazioni, vedere Le API di serializzazione BinaryFormatter generano errori del compilatore.
Descrizione delle modifiche
A causa delle vulnerabilità di sicurezza in BinaryFormatter, i metodi seguenti sono ora obsoleti e generano un avviso in fase di compilazione con ID SYSLIB0011
. Inoltre, in ASP.NET Core 5.0 e versioni successive, genereranno un'eccezione NotSupportedException, a meno che l'app Web non abbia riabilitato la funzionalità BinaryFormatter.
Anche i metodi di serializzazione seguenti sono obsoleti e generano un avviso SYSLIB0011
, ma non presentano modifiche funzionali:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Versione introdotta
5.0
Motivo della modifica
Questi metodi sono contrassegnati come obsoleti nell’ambito di uno sforzo teso a evitare l'utilizzo di BinaryFormatter all'interno dell'ecosistema .NET.
Azione consigliata
Interrompere l'uso di BinaryFormatter nel codice. Prendere invece in considerazione l'uso di JsonSerializer o XmlSerializer. Per altre informazioni, vedere La guida alla sicurezza di BinaryFormatter.
È possibile eliminare temporaneamente l'avviso BinaryFormatter in fase di compilazione, ovvero
SYSLIB0011
. È consigliabile valutare accuratamente il codice per individuare i rischi prima di scegliere tale opzione. Il modo più semplice per eliminare gli avvisi consiste nel racchiudere il singolo sito di chiamata con direttive#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 }
È anche possibile eliminare l'avviso nel file di progetto.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
Se si elimina l'avviso nel file di progetto, l'avviso viene eliminato per tutti i file di codice nel progetto. L'eliminazione di
SYSLIB0011
non elimina gli avvisi causati dall'uso di altre API obsolete.Per continuare a usare BinaryFormatter nelle app di ASP.NET, è possibile riabilitarlo nel file di progetto. Tuttavia, è consigliabile non eseguire tale operazione. Per altre informazioni, vedere La guida alla sicurezza di BinaryFormatter.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Per altre informazioni sulle azioni consigliate, vedere Risoluzione degli errori di obsolescenza e disabilitazione di BinaryFormatter.
API interessate
- 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)