Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
Eseguire la migrazione da BinaryFormatter. È consigliabile esaminare le opzioni per interrompere l'uso BinaryFormatter a causa dei rischi di sicurezza associati. Di seguito sono elencate diverse opzioni .
Continuare a usare BinaryFormatter. Se è necessario continuare a usare BinaryFormatter in .NET 9, si deve dipendere dal pacchetto NuGet System.Runtime.Serialization.Formatters non supportato, che sostituisce l'implementazione che genera un'eccezione.
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.
- Eseguire la migrazione a System.Text.Json (JSON)
- Eseguire la migrazione a DataContractSerializer (XML)
- Eseguire la migrazione a MessagePack (binario)
- Eseguire la migrazione a protobuf-net (binary)
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.