SYSLIB0001: a codificação UTF-7 é insegura
A codificação UTF-7 não está mais em uso amplo entre aplicativos, e muitas especificações agora proíbem seu uso no intercâmbio. Ele também é ocasionalmente usado como um vetor de ataque em aplicativos que não preveem encontrar dados codificados em UTF-7. A Microsoft alerta contra o uso porque System.Text.UTF7Encoding não fornece detecção de erros.
Assim, as APIs a seguir são marcadas como obsoletas, começando no .NET 5. O uso dessas APIs gera aviso SYSLIB0001
em tempo de compilação.
- Propriedade Encoding.UTF7
- Construtores UTF7Encoding
Soluções Alternativas
Se você estiver usando Encoding.UTF7 ou UTF7Encoding dentro de seu próprio protocolo ou formato de arquivo:
Mude para usar Encoding.UTF8 ou UTF8Encoding. O UTF-8 é um padrão do setor e é amplamente compatível com linguagens, sistemas operacionais e runtimes. O uso do UTF-8 facilita a manutenção futura do código e o torna mais interoperável com o restante do ecossistema.
Se você estiver comparando uma instância Encoding com Encoding.UTF7:
Em vez disso, considere executar uma verificação na conhecida página de código UTF-7, que é
65000
. Ao comparar com a página de código, você evita o aviso e também lida com alguns casos de borda, como se alguém chamassenew UTF7Encoding()
ou definisse uma subclasse do tipo.void DoSomething(Encoding enc) { // Don't perform the check this way. // It produces a warning and misses some edge cases. if (enc == Encoding.UTF7) { // Encoding is UTF-7. } // Instead, perform the check this way. if (enc != null && enc.CodePage == 65000) { // Encoding is UTF-7. } }
Suprimir um aviso
Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.
Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.
// Disable the warning.
#pragma warning disable SYSLIB0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0001
Para suprimir todos os avisos SYSLIB0001
no projeto, adicione uma propriedade <NoWarn>
ao arquivo de projeto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
</PropertyGroup>
</Project>
Para obter mais informações, confira Suprimir avisos.