Compartir vía


BinaryFormatter Guía de migración

Precaución

Se recomienda encarecidamente usar BinaryFormatter debido a los riesgos de seguridad asociados. Los usuarios existentes deben migrar lejos de BinaryFormatter.

A partir de .NET 9, ya no incluimos una implementación de BinaryFormatter en el tiempo de ejecución. Las API siguen estando presentes, pero su implementación siempre produce un PlatformNotSupportedException, independientemente del tipo de proyecto. Por lo tanto, establecer la marca de compatibilidad con versiones anteriores existente ya no es suficiente para usar BinaryFormatter.

Tiene dos opciones para solucionarlo:

  • Migración desde BinaryFormatter. Se recomienda encarecidamente investigar las opciones para dejar de usar BinaryFormatter debido a los riesgos de seguridad asociados. A continuación se enumeran varias opciones .

  • Siga usando BinaryFormatter. Si necesita seguir usando BinaryFormatter en .NET 9, tendrá que depender del paquete NuGet no compatible System.Runtime.Serialization.Formatters, que reemplaza la implementación que genera una excepción.

¿Cuál es el riesgo de usar BinaryFormatter?

Cualquier deserializador, ya sea binario o de texto, que permita que su entrada contenga información sobre los objetos que se van a crear es un problema de seguridad que puede ocurrir. Hay una enumeración de puntos débiles comunes (CWE) que describe el problema: CWE-502 "Deserialización de datos que no son de confianza". BinaryFormatter, incluido en la versión inicial de .NET Framework en 2002, es un deserializador de este tipo. También tratamos esto en la guía de seguridad BinaryFormater.

Debido a los riesgos conocidos de usar BinaryFormatter, la funcionalidad se excluyó de .NET Core 1.0. Pero sin una ruta de migración clara para usar algo más seguro, la demanda del cliente llevó a BinaryFormatter incluirse en .NET Core 2.0. Desde entonces, el equipo de .NET ha estado trabajando para quitar BinaryFormatter, ha ido desactivándolo por defecto lentamente en varios tipos de proyecto, pero permite a los usuarios activar la opción mediante banderas si aún es necesario para la compatibilidad con versiones anteriores.

Para obtener más información sobre la decisión, consulte el anuncio de la eliminación de BinaryFormatter en .NET 9.

Si experimenta problemas relacionados con la eliminación de BinaryFormatter que no están solucionados en esta guía de migración, informe un problema en github.com/dotnet/runtime y especifique que el problema está relacionado con la eliminación de BinaryFormatter.

Temas de migración

La migración fuera de BinaryFormatter normalmente significa elegir un serializador diferente. Sin embargo, normalmente solo se puede hacer si controla tanto el productor como el consumidor de los datos codificados. En caso de que no controle el productor, también puede cambiar a nuestra nueva API para leer cargas útiles BinaryFormatter sin instanciar ninguno de los tipos codificados.

A continuación se exploran ambas opciones.

Elección de un serializador

El primer paso de la migración de BinaryFormatter es elegir un serializador que se va a usar en su lugar. Según sus necesidades específicas, el equipo de .NET recomienda las migraciones a cuatro serializadores diferentes.

Lectura de cargas de BinaryFormatter (NRBF)

Muchas aplicaciones cargan y deserializan cargas que se han conservado en el almacenamiento y no siempre es posible transformar todas las cargas persistentes por adelantado. Otros escenarios pueden implicar sistemas o servicios que reciben datos generados por BinaryFormatter, donde estos sistemas deben migrarse de forma independiente.

En estos escenarios y otros, es necesario conservar la compatibilidad para leer las cargas proporcionadas y pasar a un nuevo formato a lo largo del tiempo. Para satisfacer estas necesidades, ahora es posible leer de forma segura las cargas NRBF creadas con BinaryFormatter sin realizar la deserialización de uso general y vulnerable.

Migrar aplicaciones de Windows Forms y WPF

Las aplicaciones de Windows Forms y WPF pueden requerir cambios adicionales. Consulte Aplicaciones de Windows Forms, aplicaciones de WPF y Portapapeles de WinForms/WPF y guía de arrastrar y colocar para obtener más instrucciones de migración.

Migración de recursos administrados (ResX)

Los tipos de recursos más comunes (como cadenas e iconos) funcionarán sin BinaryFormatter. Para los tipos personalizados, debe incorporar BinaryFormatter y habilitar un interruptor de compatibilidad, consulte Cargar recursos durante la ejecución.

Uso del paquete de compatibilidad

En escenarios en los que una migración fuera de BinaryFormatter no se puede realizar en el momento de actualizar a .NET 9, hay disponible un paquete de compatibilidad no compatible. Serialization. El paquete NuGet de formateadores contiene la implementación funcional de , incluyendo sus vulnerabilidades y riesgos.

Aunque no se admite y no se recomienda, la guía para usar el paquete de compatibilidad incluye los detalles para instalar el paquete y habilitar la funcionalidad.

Precaución

Se recomienda encarecidamente usar BinaryFormatter debido a los riesgos de seguridad asociados. Los usuarios existentes deben migrar lejos de BinaryFormatter.