Partilhar via


SYSLIB0001: A codificação UTF-7 é insegura

A codificação UTF-7 não é mais amplamente usada entre os aplicativos, e muitas especificações agora proíbem seu uso no intercâmbio. Também é ocasionalmente usado como um vetor de ataque em aplicativos que não preveem encontrar dados codificados em UTF-7. A Microsoft adverte contra o uso de porque não fornece deteção de System.Text.UTF7Encoding erros.

Consequentemente, 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

  • Se estiver a utilizar Encoding.UTF7 ou UTF7Encoding dentro do seu próprio protocolo ou formato de ficheiro:

    Mudar para utilizar Encoding.UTF8 ou UTF8Encoding. UTF-8 é um padrão da indústria e é amplamente suportado em idiomas, sistemas operacionais e tempos de execução. O uso do UTF-8 facilita a manutenção futura do seu código e o torna mais interoperável com o resto do ecossistema.

  • Se você estiver comparando uma Encoding instância 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 ligou new UTF7Encoding() ou subclassificou o 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 você precisar usar as APIs obsoletas, poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar 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 SYSLIB0001 avisos em seu projeto, adicione uma <NoWarn> propriedade ao seu arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, consulte Suprimir avisos.

Consulte também