Los métodos de serialización BinaryFormatter están obsoletos y se prohíben en las aplicaciones ASP.NET

Los métodos Serialize y Deserialize de BinaryFormatter, Formatter y IFormatter ahora están obsoletos como advertencia. Además, la serialización de BinaryFormatter está prohibida de forma predeterminada en aplicaciones de ASP.NET.

Nota

En .NET 7, las API afectadas están obsoletas como error. Para obtener más información, vea BinaryFormatter serialization API produce errores del compilador.

Descripción del cambio

Debido a vulnerabilidades de seguridad en BinaryFormatter, los siguientes métodos ahora están obsoletos y generan una advertencia en tiempo de compilación con el identificador SYSLIB0011. Además, en las aplicaciones ASP.NET Core 5.0 y versiones posteriores, iniciarán una excepción NotSupportedException, a menos que la aplicación web haya vuelto a habilitar la funcionalidad BinaryFormatter.

Los siguientes métodos de serialización también están obsoletos y generan una advertencia SYSLIB0011, pero no presentan cambios de comportamiento:

Versión introducida

5.0

Motivo del cambio

En un esfuerzo por poner fin al uso de BinaryFormatter dentro del ecosistema de .NET, estos métodos están marcados como obsoletos.

  • Deje de usar BinaryFormatter en el código. Considere mejor el uso de JsonSerializer o XmlSerializer. Para más información, consulte Guía de seguridad de BinaryFormatter.

  • Puede suprimir temporalmente la advertencia en tiempo de compilación de BinaryFormatter, que es SYSLIB0011. Le recomendamos que evalúe detenidamente el código para detectar los riesgos antes de elegir esta opción. La manera más fácil de suprimir las advertencias es colocar directivas #pragma en torno al sitio de llamada individual.

    // 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
    }
    

    También puede suprimir la advertencia en el archivo del proyecto.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "BinaryFormatter is obsolete" warnings for entire project -->
      <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
    </PropertyGroup>
    

    Si suprime la advertencia en el archivo del proyecto, se suprime la advertencia para todos los archivos de código del proyecto. La supresión de SYSLIB0011 no suprime las advertencias causadas por el uso de otras API obsoletas.

  • Para seguir usando BinaryFormatter en aplicaciones ASP.NET, puede volver a habilitarlo en el archivo del proyecto. Sin embargo, se recomienda encarecidamente no hacerlo. Para más información, consulte Guía de seguridad de BinaryFormatter.

    <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
      <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
    </PropertyGroup>
    

Para más información sobre las acciones recomendadas, consulte Resolución de errores de desactivación y deshabilitación de BinaryFormatter.

API afectadas

Vea también