Condividi tramite


SYSLIB0003: la sicurezza dall’accesso di codice non è supportata

La sicurezza dall'accesso di codice (CAS) è una tecnologia legacy non supportata. L'infrastruttura per abilitare la CAS, che esiste solo in .NET Framework 2.x - 4.x, è deprecata e non riceve aggiornamenti relativi a manutenzione e sicurezza.

Di conseguenza, la maggior parte dei tipi correlati alla sicurezza dall'accesso al codice (CAS) in .NET è obsoleta, a partire da .NET 5. Sono inclusi attributi della sicurezza dell’accesso di codice, come SecurityPermissionAttribute, oggetti autorizzazioni sicurezza dell’accesso di codice, come SocketPermission, tipi derivati da EvidenceBase e altre API di supporto. L'uso di queste API genera un avviso SYSLIB0003 in fase di compilazione.

L'elenco completo delle API CAS obsolete è il seguente:

Soluzioni alternative

  • Se affermi un'autorizzazione di sicurezza, rimuovi l'attributo o la chiamata che afferma l'autorizzazione.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Se neghi o limiti (tramite PermitOnly) qualsiasi autorizzazione, contatta l'assistente alla sicurezza. Poiché gli attributi CAS non vengono rispettati dal runtime .NET 5+, l'applicazione potrebbe avere un problema di sicurezza, se si basa erroneamente sull'infrastruttura CAS per limitare l'accesso a questi metodi.

    // 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();
    }
    
  • Se richiedi un'autorizzazione (ad eccezione di PrincipalPermission), rimuovi la richiesta. Tutte le richieste avranno esito positivo in fase di esecuzione.

    // 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();
    }
    
  • Se si richiede PrincipalPermission, consultare le indicazioni per SYSLIB0002: PrincipalPermissionAttribute è obsoleto. Queste indicazioni si applicano sia per PrincipalPermission che per PrincipalPermissionAttribute.

Eliminare un avviso

Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Per eliminare tutti gli avvisi SYSLIB0003 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.

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

Per altre informazioni, vedere Eliminare gli avvisi.

Vedi anche