Delen via


SYSLIB0003: Beveiliging van codetoegang wordt niet ondersteund

Code Access Security (CAS) is een niet-ondersteunde, verouderde technologie. De infrastructuur voor het inschakelen van CAS, die alleen bestaat in .NET Framework 2.x - 4.x, wordt afgeschaft en ontvangt geen onderhouds- of beveiligingscorrecties.

Als gevolg hiervan zijn de meeste CAS-gerelateerde typen (Code Access Security) in .NET verouderd, te beginnen in .NET 5. Dit omvat CAS-kenmerken, zoals SecurityPermissionAttributeCAS-machtigingsobjecten, zoals SocketPermissionEvidenceBase, -afgeleide typen en andere ondersteunende API's. Met deze API's genereert u een waarschuwing SYSLIB0003 tijdens het compileren.

De volledige lijst met verouderde CAS-API's is als volgt:

Tijdelijke oplossingen

  • Als u een beveiligingsmachtiging bevestigt, verwijdert u het kenmerk of de aanroep die de machtiging bevestigt.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Neem contact op met uw beveiligingsadviseur als u een machtiging weigert of beperkt (via PermitOnly) een machtiging. Omdat CAS-kenmerken niet worden gehonoreerd door de .NET 5+ runtime, kan uw toepassing een beveiligingsgat hebben als deze onjuist afhankelijk is van de CAS-infrastructuur om de toegang tot deze methoden te beperken.

    // 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();
    }
    
  • Als u een machtiging aanvraagt (behalve PrincipalPermission), verwijdert u de vraag. Alle eisen slagen tijdens runtime.

    // 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();
    }
    
  • Als u veeleisend PrincipalPermissionbent, raadpleegt u de richtlijnen voor SYSLIB0002: PrincipalPermissionAttribute is verouderd. Deze richtlijnen zijn van toepassing op zowel PrincipalPermission als PrincipalPermissionAttribute.

Een waarschuwing onderdrukken

Als u de verouderde API's moet gebruiken, kunt u de waarschuwing in code of in het projectbestand onderdrukken.

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de waarschuwing uit te schakelen en vervolgens opnieuw in te schakelen.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Als u alle SYSLIB0003 waarschuwingen in uw project wilt onderdrukken, voegt u een <NoWarn> eigenschap toe aan het projectbestand.

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

Zie Waarschuwingen onderdrukken voor meer informatie.

Zie ook