SYSLIB0003: A kódhozzáférés biztonsága nem támogatott

A kódhozzáférés biztonsága (CAS) egy nem támogatott, örökölt technológia. A CAS engedélyezésére szolgáló infrastruktúra, amely csak a .NET-keretrendszer 2.x - 4.x verziójában létezik, elavult, és nem kap karbantartási vagy biztonsági javításokat.

Ennek eredményeképpen a .NET-ben a kódhozzáféréssel (CAS) kapcsolatos legtöbb típus elavult, kezdve a .NET 5-tel. Ide tartoznak a CAS-attribútumok, például SecurityPermissionAttributea CAS-engedélyobjektumok, például SocketPermissiona - EvidenceBaseszármaztatott típusok és egyéb támogató API-k. Ezen API-k használata figyelmeztetést SYSLIB0003 generál fordításkor.

Az elavult CAS API-k teljes listája a következő:

Áthidaló megoldások

  • Ha biztonsági engedélyt kíván érvényesíteni, távolítsa el az engedélyt érvényesítő attribútumot vagy hívást.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Ha bármilyen engedélyt megtagad vagy korlátoz (keresztül PermitOnly), forduljon a biztonsági tanácsadójához. Mivel a .NET 5+ futtatókörnyezet nem tartja tiszteletben a CAS-attribútumokat, az alkalmazás biztonsági rést okozhat, ha helytelenül a CAS-infrastruktúrára támaszkodik a metódusokhoz való hozzáférés korlátozásához.

    // 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();
    }
    
  • Ha bármilyen engedélyt igényel (kivéve PrincipalPermission), távolítsa el az igényt. Futásidőben minden igény sikeres lesz.

    // 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();
    }
    
  • Ha igény van PrincipalPermission, tekintse meg a SYSLIB0002 útmutatóját: a PrincipalPermissionAttribute elavultnak minősül. Ez az útmutató mind a PrincipalPermission-re, mind a PrincipalPermissionAttribute-re vonatkozik.

Figyelmeztetés mellőzése

Ha az elavult API-kat kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Ha el szeretné tiltani a projekt összes SYSLIB0003 figyelmeztetését, adjon hozzá egy <NoWarn> tulajdonságot a projektfájlhoz.

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

További információ: Figyelmeztetések letiltása.

Lásd még