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 estão obsoletos como aviso. Além disso, a serialização BinaryFormatter é 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, confira APIs de serialização BinaryFormatter produzem erros de compilador.
Descrição das alterações
Devido a vulnerabilidades de segurança no BinaryFormatter, os métodos a seguir agora estão obsoletos e produzem um aviso em tempo de compilação com 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 ficaram obsoletos e produzem aviso SYSLIB0011
, mas não têm alterações comportamentais:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Versão introduzida
5,0
Motivo da alteração
Esses métodos foram marcados como obsoletos como parte de um esforço para reduzir o uso do BinaryFormatter dentro do ecossistema .NET.
Ação recomendada
Pare de usar BinaryFormatter em seu código. Em vez disso, considere usar JsonSerializer ou XmlSerializer. Para obter mais informações, confira o Guia de segurança do BinaryFormatter.
Você pode suprimir temporariamente o aviso em tempo de compilação BinaryFormatter, que é
SYSLIB0011
. Recomendamos que você avalie seu código detalhadamente 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. A supressão de
SYSLIB0011
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, confira 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, confira Resolver erros de desabilitação e obsolescência do BinaryFormatter.
APIs afetadas
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)