Condividi tramite


BinaryFormatter guida alla migrazione

Attenzione

È consigliabile evitare l'uso BinaryFormatter a causa dei rischi di sicurezza associati. Gli utenti esistenti devono eseguire la migrazione da BinaryFormatter.

A partire da .NET 9, non è più inclusa un'implementazione di BinaryFormatter nel runtime. Le API sono ancora presenti, ma l'implementazione genera sempre , PlatformNotSupportedExceptionindipendentemente dal tipo di progetto. Di conseguenza, impostare il flag di compatibilità con le versioni precedenti non è più sufficiente per usare BinaryFormatter.

Sono disponibili due opzioni per risolvere questo errore:

Qual è il rischio di usare BinaryFormatter?

Qualsiasi deserializzatore, binario o testo, che consente all'input di contenere informazioni sugli oggetti da creare è un problema di sicurezza in attesa di verificarsi. Esiste un'enumerazione di debolezza comune (CWE) che descrive il problema: CWE-502 "Deserializzazione di dati non attendibili". BinaryFormatter, incluso nella versione iniziale di .NET Framework nel 2002, è un deserializzatore di questo tipo. Questo argomento viene illustrato anche nella Guida alla sicurezza di BinaryFormater.

A causa dei rischi noti dell'uso BinaryFormatterdi , la funzionalità è stata esclusa da .NET Core 1.0. Ma senza un chiaro percorso di migrazione all'uso di qualcosa di più sicuro, la domanda dei clienti ha portato a BinaryFormatter essere inclusa in .NET Core 2.0. Da allora, il team .NET è stato impegnato nel processo di rimozione di BinaryFormatter, disattivandolo lentamente per impostazione predefinita in vari tipi di progetto, ma consentendo agli utenti di attivarlo tramite flag, se ancora necessario per la compatibilità con le versioni precedenti.

Per altri dettagli sulla decisione, vedere l'annuncio relativo alla BinaryFormatter rimozione che avverrà in .NET 9.

Se si verificano problemi relativi alla BinaryFormatterrimozione non risolta in questa guida alla migrazione, segnalare un problema in github.com/dotnet/runtime e indicare che il problema è correlato alla rimozione di BinaryFormatter.

Argomenti sulla migrazione

La migrazione da BinaryFormatter in genere significa scegliere un serializzatore diverso. Tuttavia, ciò è generalmente fattibile solo se si controllano sia il produttore che il consumatore dei dati codificati. Se non si controlla il produttore, è anche possibile passare alla BinaryFormatter senza creare istanze dei tipi codificati.

Entrambe le opzioni sono illustrate di seguito.

Scegliere un serializzatore

Il primo passaggio della migrazione da BinaryFormatter consiste nel scegliere un serializzatore da usare al suo posto. A seconda delle esigenze specifiche, il team .NET consiglia le migrazioni a quattro serializzatori diversi.

Leggere BinaryFormatter payload (NRBF)

Molte applicazioni caricano e deserializzano i payload che sono stati resi persistenti nell'archiviazione e non sempre è possibile trasformare tutti i payload persistenti iniziali. Altri scenari possono riguardare sistemi o servizi che ricevono dati generati da BinaryFormatter, in cui questi sistemi devono essere migrati in modo indipendente.

In questi scenari e altri, diventa necessario mantenere il supporto per la lettura dei payload forniti e la transizione a un nuovo formato nel tempo. Per soddisfare queste esigenze, è ora possibile leggere in modo sicuro i payload NRBF creati con BinaryFormatter senza eseguire la deserializzazione per utilizzo generico e vulnerabile.

Eseguire la migrazione di applicazioni Windows Form e WPF

Le applicazioni Windows Form e WPF potrebbero richiedere modifiche aggiuntive. Per ulteriori indicazioni sulla migrazione, vedere app Windows Forms, app WPF e linee guida per appunti e trascinamento della selezione di WinForms/WPF.

Eseguire la migrazione di risorse gestite (ResX)

I tipi di risorse più comuni , ad esempio stringhe e icone, funzionano senza BinaryFormatter. Per i tipi personalizzati, è necessario inserire BinaryFormatter e abilitare un commutatore di compatibilità, vedere Caricamento della risorsa durante il runtime.

Usare il pacchetto di compatibilità

Per gli scenari in cui non è possibile eseguire una migrazione lontano da BinaryFormatter al momento dell'aggiornamento a .NET 9, è disponibile un pacchetto di compatibilità non supportato. Il pacchetto NuGet System.Runtime.Serialization.Formatters contiene l'implementazione funzionante di BinaryFormatter, incluse le sue vulnerabilità e i rischi.

Sebbene non sia supportato e non consigliato, la guida per l'uso del pacchetto di compatibilità include i dettagli per l'installazione del pacchetto e l'abilitazione della funzionalità.

Attenzione

È consigliabile evitare l'uso BinaryFormatter a causa dei rischi di sicurezza associati. Gli utenti esistenti devono eseguire la migrazione da BinaryFormatter.