SYSLIB0003 : La sécurité d’accès au code n’est pas prise en charge

La sécurité d’accès du code (CAS, Code Access Security) est une technologie héritée non prise en charge. L’infrastructure permettant d’activer CAS, qui existe seulement dans .NET Framework 2.x - 4.x, est dépréciée et ne reçoit pas de correctifs de maintenance ou de sécurité.

Par conséquent, la plupart des types liés à la sécurité d’accès au code (CAS) dans .NET sont obsolètes à compter de .NET 5. Cela inclut les attributs CAS, comme SecurityPermissionAttribute, les objets d’autorisation CAS, comme SocketPermission, les types dérivés de EvidenceBase et d’autres API de prise en charge. L’utilisation de ces API génère un avertissement SYSLIB0003 à la compilation.

Voici la liste complète des API CAS obsolètes :

Solutions de contournement

  • Si vous affirmez une autorisation de sécurité, supprimez l’attribut ou l’appel qui affirme l’autorisation.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Si vous refusez ou limitez une autorisation (via PermitOnly), contactez votre conseiller en sécurité. Étant donné que les attributs CAS ne sont pas respectés par le runtime .NET 5+, votre application peut avoir une faille de sécurité si elle s’appuie incorrectement sur l’infrastructure CAS pour restreindre l’accès à ces méthodes.

    // REVIEW the attribute below; could indicate security vulnerability.
    [SecurityPermission(SecurityAction.Deny, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoPermitOnly()
    {
        // REVIEW the line below; could indicate security vulnerability.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).PermitOnly();
    }
    
  • Si vous demandez une autorisation (sauf PrincipalPermission), supprimez la demande. Toutes les demandes réussissent au moment de l’exécution.

    // REMOVE the attribute below; it will always succeed.
    [SecurityPermission(SecurityAction.Demand, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoDemand()
    {
        // REMOVE the line below; it will always succeed.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Demand();
    }
    
  • Si vous demandez PrincipalPermission, consultez les conseils pour SYSLIB0002 : PrincipalPermissionAttribute est obsolète. Cette aide s’applique à la fois à PrincipalPermission et PrincipalPermissionAttribute.

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 SYSLIB0003

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

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

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

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

Pour plus d’informations, consultez Supprimer des avertissements.

Voir aussi