Udostępnij za pośrednictwem


SYSLIB0003: Zabezpieczenia dostępu kodu nie są obsługiwane

Zabezpieczenia dostępu kodu (CAS) to nieobsługiwana, starsza technologia. Infrastruktura umożliwiająca włączenie usługi CAS, która istnieje tylko w programie .NET Framework 2.x — 4.x, jest przestarzała i nie otrzymuje poprawek obsługi lub zabezpieczeń.

W związku z tym większość typów zabezpieczeń dostępu kodu (CAS) na platformie .NET jest przestarzała, począwszy od platformy .NET 5. Obejmuje to atrybuty CAS, takie jak , obiekty uprawnień CAS, takie jak SecurityPermissionAttributeSocketPermission, EvidenceBasetypy pochodne i inne pomocnicze interfejsy API. Użycie tych interfejsów API generuje ostrzeżenie SYSLIB0003 w czasie kompilacji.

Pełna lista przestarzałych interfejsów API CAS wygląda następująco:

Obejścia

  • Jeśli potwierdzasz jakiekolwiek uprawnienia zabezpieczeń, usuń atrybut lub wywołanie, które potwierdza uprawnienie.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Jeśli odmawiasz lub ograniczasz (za pośrednictwem PermitOnly) wszelkich uprawnień, skontaktuj się z doradcą ds. zabezpieczeń. Ponieważ atrybuty CAS nie są honorowane przez środowisko uruchomieniowe platformy .NET 5+, aplikacja może mieć dziurę zabezpieczeń, jeśli nieprawidłowo korzysta z infrastruktury CAS w celu ograniczenia dostępu do tych metod.

    // 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();
    }
    
  • Jeśli domagasz się wszelkich uprawnień (z wyjątkiem PrincipalPermission), usuń żądanie. Wszystkie wymagania zostaną wykonane w czasie wykonywania.

    // 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();
    }
    
  • Jeśli wymagasz PrincipalPermission, zapoznaj się ze wskazówkami dotyczącymi SYSLIB0002: PrincipalPermissionAttribute jest przestarzały. Te wskazówki dotyczą zarówno systemów , jak PrincipalPermission i PrincipalPermissionAttribute.

Pomijanie ostrzeżenia

Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.

Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Aby pominąć wszystkie SYSLIB0003 ostrzeżenia w projekcie, dodaj <NoWarn> właściwość do pliku projektu.

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

Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.

Zobacz też