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:

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.

  • 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

Vedi anche