Partilhar via


Os métodos de serialização BinaryFormatter são obsoletos e proibidos em aplicativos ASP.NET

Serialize e Deserialize métodos em BinaryFormatter, Formattere IFormatter agora estão obsoletos como aviso. Além disso, BinaryFormatter a serialização é proibida por padrão para aplicativos ASP.NET.

Nota

No .NET 7, as APIs afetadas são obsoletas como erro. Para obter mais informações, consulte APIs de serialização BinaryFormatter produzem erros do compilador.

Alterar a descrição

Devido a vulnerabilidades de segurança no BinaryFormatter, os seguintes métodos estão agora obsoletos e produzem um aviso em tempo de compilação com ID SYSLIB0011. Além disso, no ASP.NET Core 5.0 e aplicativos posteriores, eles lançarão um NotSupportedException, a menos que o aplicativo Web tenha a funcionalidade reativada BinaryFormatter .

Os seguintes métodos de serialização também são obsoletos e produzem aviso SYSLIB0011, mas não têm alterações comportamentais:

Versão introduzida

5.0

Razão para a alteração

Esses métodos são marcados como obsoletos como parte de um esforço para reduzir o uso de BinaryFormatter dentro do ecossistema .NET.

  • Pare de usar BinaryFormatter no seu código. Em vez disso, considere usar JsonSerializer ou XmlSerializer. Para obter mais informações, consulte BinaryFormatter security guide.

  • Você pode suprimir temporariamente o aviso de tempo de BinaryFormatter compilação, que é SYSLIB0011. Recomendamos que você avalie cuidadosamente seu código quanto aos riscos antes de escolher essa opção. A maneira mais fácil de suprimir os avisos é cercar o site de chamada individual com #pragma diretivas.

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

    Você também pode suprimir o aviso no arquivo de projeto.

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

    Se você suprimir o aviso no arquivo de projeto, o aviso será suprimido para todos os arquivos de código no projeto. A supressão SYSLIB0011 não suprime avisos causados pelo uso de outras APIs obsoletas.

  • Para continuar a usar BinaryFormatter em aplicativos ASP.NET, você pode reativá-lo no arquivo de projeto. No entanto, é altamente recomendável não fazer isso. Para obter mais informações, consulte BinaryFormatter security guide.

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

Para obter mais informações sobre as ações recomendadas, consulte Resolvendo erros de obsolescência e desativação BinaryFormatter.

APIs afetadas

Consulte também