Considerazioni sulla protezione in relazione alla reflection
Fornire accesso a informazioni non pubbliche comporta rischi di protezione. Il codice a cui è consentito l'accesso a informazioni non pubbliche su un tipo può potenzialmente accedere a codice, dati e altre informazioni che si intende mantenere riservate. La protezione di .NET Framework definisce pertanto regole che determinano il grado di reflection ammesso per l'acquisizione di informazioni sui tipi e per l'accesso ai tipi. A seconda dell'operazione che si desidera eseguire, può essere richiesto l'utilizzo di una ReflectionPermission o della SecurityPermission per la serializzazione.
Nel codice è possibile utilizzare la reflection per le seguenti attività senza autorizzazioni:
Ottenere informazioni sui tipi pubblici e sui relativi membri pubblici.
Individuare il modulo e l'assembly in cui il codice stesso si trova.
Enumerare i tipi pubblici.
Enumerare i tipi non pubblici presenti nello stesso assembly del codice che utilizza la reflection.
Enumerare assembly e moduli.
Richiamare membri pubblici.
Richiamare membri di accesso a livello di famiglia delle classi base del codice chiamante.
Richiamare membri di accesso a livello di assembly dell'assembly del codice chiamante.
Per ottenere informazioni sui membri non pubblici, i chiamanti devono disporre di ReflectionPermission, che rappresenta l'autorizzazione a ottenere informazioni sul tipo. In mancanza di tale autorizzazione, il codice non potrà utilizzare la reflection per ottenere informazioni sui membri non pubblici (anche se della classe di appartenenza) mediante i metodi Get di Type, Assembly e Module.
Per utilizzare la reflection per richiamare metodi o per accedere a campi che sono inaccessibili in base alle regole di accessibilità del sistema di tipi comune, occorre che il codice disponga di ReflectionPermission per l'accesso ai membri.
Nota
È consigliabile che i criteri di protezione neghino l'autorizzazione ReflectionPermission al codice che proviene da Internet.
L'autorizzazione SecurityPermission per la serializzazione consente di ottenere e impostare tutti i campi di dati non volatili (ovvero membri che non esistono solo in memoria) dei tipi serializzabili, indipendentemente dall'accessibilità. Questa autorizzazione consente di leggere e modificare lo stato privato di un'istanza tramite codice. Oltre a disporre delle autorizzazioni appropriate, il tipo deve essere contrassegnato come serializzabile nei metadati.
Controlli di richiesta di collegamento
Se a un metodo o a un delegato è associata una LinkDemand per un'autorizzazione P, in fase di esecuzione verrà eseguito un controllo della richiesta di collegamento sul chiamante del metodo o del delegato, per verificare che al chiamante sia stata concessa l'autorizzazione P. Il controllo della richiesta di collegamento si verifica sia per le informazioni sul tipo che per il richiamo.
È preferibile evitare di scrivere API pubbliche che accettano parametri MethodInfo, in particolare per il codice con elevato livello di attendibilità. I diritti di autorizzazione potrebbero risultare più vulnerabili al codice dannoso. Si consideri ad esempio un'API pubblica in un codice con elevato livello di attendibilità che accetta un parametro MethodInfo. Si supponga che l'API pubblica chiami indirettamente MethodInfo.Invoke sul parametro fornito. Se dall'API pubblica non vengono eseguiti i controlli di autorizzazione necessari, la chiamata del metodo Invoke riuscirà comunque, perché il sistema di protezione determina l'elevato livello di attendibilità del chiamante. Anche se il codice dannoso non dispone dell'autorizzazione per richiamare il metodo direttamente, potrà chiamarlo indirettamente tramite una chiamata dell'API pubblica.
Vedere anche
Riferimenti
ReflectionPermissionFlag.TypeInformation
ReflectionPermissionFlag.MemberAccess
SecurityPermission
Concetti
Visualizzazione delle informazioni sul tipo
Applicazione di attributi
Accesso ad attributi personalizzati