SYSLIB0001 : L’encodage UTF-7 n’est pas sécurisé

L’encodage UTF-7 n’est plus largement utilisé par les applications et de nombreuses spécifications interdisent désormais son utilisation dans l’échange. Il est également parfois utilisé comme vecteur d’attaque dans les applications qui ne prévoient pas rencontrer des données encodées en UTF-7. Microsoft met en garde contre l’utilisation de System.Text.UTF7Encoding, car il ne fournit pas de détection d’erreurs.

Par conséquent, les API suivantes sont marquées comme obsolètes à compter de .NET 5. L’utilisation de ces API génère des avertissements SYSLIB0001 au moment de la compilation.

Solutions de contournement

  • Si vous utilisez Encoding.UTF7 ou UTF7Encoding dans votre propre protocole ou format de fichier :

    Basculez vers à l’utilisation de Encoding.UTF8 ou UTF8Encoding. UTF-8 est une norme du secteur et est largement pris en charge dans les langages, les systèmes d’exploitation et les runtimes. L’utilisation d’UTF-8 facilite la maintenance future de votre code et améliore son interopérabilité avec le reste de l’écosystème.

  • Si vous comparez une instance Encoding à Encoding.UTF7 :

    Au lieu de cela, envisagez d’effectuer une vérification par rapport à la page de codes UTF-7 bien connue, qui est 65000. En comparant la page de codes, vous évitez l’avertissement et gérez également certains cas de périphérie, par exemple si quelqu’un a appelé new UTF7Encoding() ou sous-classé le type.

    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.
        }
    }
    

Supprimer un avertissement

Si vous devez utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le code ou dans votre fichier projet.

Pour supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactiver l’avertissement.

// Disable the warning.
#pragma warning disable SYSLIB0001

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0001

Pour supprimer tous les avertissements SYSLIB0001 dans votre projet, ajoutez une propriété <NoWarn> à votre fichier projet.

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

Pour plus d’informations, consultez Supprimer des avertissements.

Voir aussi