Compartilhar via


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.

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 chamasse new 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.

Confira também