Sdílet prostřednictvím


SYSLIB0003: Zabezpečení přístupu kódu se nepodporuje

Zabezpečení přístupu kódu (CAS) je nepodporovaná starší technologie. Infrastruktura pro povolení casu, která existuje pouze v rozhraní .NET Framework 2.x – 4.x, je zastaralá a nepřijímá servisní opravy nebo opravy zabezpečení.

V důsledku toho je většina typů souvisejících se zabezpečením přístupu kódu (CAS) v .NET zastaralá, počínaje rozhraním .NET 5. To zahrnuje atributy CAS, například SecurityPermissionAttributeobjekty oprávnění CAS, jako SocketPermissionjsou , EvidenceBase-odvozené typy a další podpůrné rozhraní API. Použití těchto rozhraní API generuje upozornění SYSLIB0003 v době kompilace.

Úplný seznam zastaralých rozhraní API CAS je následující:

Alternativní řešení

  • Pokud používáte nějaké oprávnění zabezpečení, odeberte atribut nebo volání, které toto oprávnění potvrzuje.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Pokud jakékoli oprávnění odepřete nebo omezíte (prostřednictvím PermitOnly), obraťte se na svého poradce pro zabezpečení. Vzhledem k tomu, že modul runtime .NET 5+ nedotkuje atributy CAS, může mít vaše aplikace díru zabezpečení, pokud nesprávně spoléhá na infrastrukturu CAS k omezení přístupu k těmto metodám.

    // 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();
    }
    
  • Pokud požadujete jakékoli oprávnění (s výjimkou PrincipalPermission), odeberte poptávku. Všechny požadavky budou v době běhu úspěšné.

    // 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();
    }
    
  • Pokud požadujete PrincipalPermission, projděte si pokyny pro SYSLIB0002: PrincipalPermissionAttribute je zastaralé. Toto pokyny platí pro obě PrincipalPermission a PrincipalPermissionAttribute.

Potlačení upozornění

Pokud musíte použít zastaralá rozhraní API, můžete potlačit upozornění v kódu nebo v souboru projektu.

Chcete-li potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, které chcete zakázat a znovu povolit upozornění.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Pokud chcete potlačit všechna SYSLIB0003 upozornění v projektu, přidejte <NoWarn> do souboru projektu vlastnost.

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

Další informace naleznete v tématu Potlačení upozornění.

Viz také