Compartilhar via


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

Os métodos Serialize e Deserialize em BinaryFormatter, Formatter, e IFormatter agora são obsoletos e apresentam um aviso. Além disso, BinaryFormatter a serialização é proibida por padrão para aplicativos ASP.NET.

Observação

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

Descrição da alteração

Devido a vulnerabilidades de segurança no BinaryFormatter, os métodos a seguir agora estão obsoletos e produzem um aviso de compilação com a ID SYSLIB0011. Além disso, no ASP.NET Core 5.0 e em aplicativos posteriores, eles lançarão um NotSupportedException, a menos que o aplicativo Web tenha habilitado novamente a funcionalidade 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

Motivo da alteração

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

  • Pare de usar BinaryFormatter em seu código. Em vez disso, considere usar JsonSerializer ou XmlSerializer. Para obter mais informações, consulte o guia de segurança do BinaryFormatter.

  • Você pode suprimir temporariamente o BinaryFormatter aviso de tempo de compilação, que é SYSLIB0011. Recomendamos que você avalie completamente 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 diretivas #pragma.

    // 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. SYSLIB0011 Suprimir não suprime avisos causados pelo uso de outras APIs obsoletas.

  • Para continuar usando BinaryFormatter em aplicativos ASP.NET, você pode habilitá-lo novamente no arquivo de projeto. No entanto, é altamente recomendável não fazer isso. Para obter mais informações, consulte o guia de segurança do BinaryFormatter.

    <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 obsoleto e desabilitação do BinaryFormatter.

APIs afetadas

Consulte também