Protezione dell'accesso ai metodi

Aggiornamento: novembre 2007

Alcuni metodi possono non risultare adatti per consentire la chiamata da parte di codice arbitrario non attendibile. L'utilizzo di metodi di questo tipo comporta diversi rischi: il metodo può fornire informazioni riservate; può ritenere valide tutte le informazioni passate; può evitare di eseguire il controllo degli errori sui parametri; con parametri errati, può funzionare in modo errato o dannoso. Tenere presenti questi casi ed eseguire le operazioni necessarie per proteggere il metodo.

In alcuni casi può essere necessario limitare i metodi non destinati all'utilizzo di tipo pubblico, ma che devono comunque essere public. È possibile ad esempio disporre di un'interfaccia che è necessario chiamare attraverso le DLL, e che quindi deve essere pubblica, ma che è preferibile non esporre pubblicamente per evitare ai clienti di utilizzarla o per impedire lo sfruttamento del punto di ingresso al componente da parte di codice dannoso. Un altro motivo comune per limitare un metodo non riservato all'utilizzo pubblico ma che deve essere pubblico è evitare la documentazione e il supporto di quella che può essere un'interfaccia di uso quasi esclusivamente interno.

Il codice gestito offre numerosi sistemi per limitare l'accesso ai metodi:

  • Limitare l'ambito di accessibilità alla classe, all'assembly o alle classi derivate, se attendibili. Si tratta del modo più semplice per limitare l'accesso al metodo. Si noti che, in genere, le classi derivate possono essere meno affidabili della classe da cui derivano, anche se in alcuni casi condividono l'identità della classe padre. In particolare, non attribuire attendibilità alla parola chiave protected, che non è necessariamente utilizzata nel contesto della protezione.

  • Limitare l'accesso al metodo ai chiamanti di un'identità specificata, ovvero una ben specifica prova, come nome sicuro, editore, area e così via.

  • Limitare l'accesso al metodo ai chiamanti che dispongano delle autorizzazioni selezionate.

In modo analogo, la protezione dichiarativa consente di controllare l'ereditarietà delle classi. È possibile utilizzare InheritanceDemand per effettuare le seguenti operazioni:

  • Richiedere che le classi derivate dispongano di un'identità o di un'autorizzazione specificata.

  • Richiedere che le classi derivate che eseguono l'override di metodi specifici dispongano di un'identità o di un'autorizzazione specificata.

Nell'esempio riportato di seguito è mostrato come proteggere una classe pubblica tramite la limitazione dell'accesso, richiedendo che i chiamanti dispongano di una firma con un nome sicuro particolare. In questo esempio viene utilizzato l'oggetto StrongNameIdentityPermissionAttribute con una richiesta Demand di nome sicuro. Per informazioni su come firmare un assembly con un nome sicuro, vedere Creazione e utilizzo degli assembly con nome sicuro.

<StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey := "…hex…", Name := "App1", Version := "0.0.0.0")>  _
Public Class Class1
End Class
[StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey="…hex…", Name="App1", Version="0.0.0.0")]
public class Class1
{

} 

Vedere anche

Altre risorse

Indicazioni per la generazione di codice protetto