Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Esporta (0) Stampa
Espandi tutto
Importante È possibile che questo documento non rappresenti le procedure consigliate per lo sviluppo attuale e che i collegamenti ai download e ad altre risorse non siano più validi. La versione consigliata attuale è disponibile qui.

Codice SecurityTransparent

Aggiornamento: novembre 2007

La nuova funzionalità di .NET Framework versione 2.0, Trasparenza, consente agli sviluppatori di scrivere in modo più sicuro le librerie .NET Framework che espongono la funzionalità a codice parzialmente attendibile. È possibile contrassegnare come SecurityTransparent un intero assembly, alcune classi di un assembly o alcuni metodi di una classe. Il codice SecurityTransparent non può elevare il livello di privilegi. Tale restrizione comporta tre conseguenze specifiche:

  • Il codice SecurityTransparent non può eseguire asserzioni.

  • Tutte le richieste di collegamento soddisfatte dal codice SecurityTransparent diventano richieste complete.

  • Il codice unsafe (non verificabile) che deve essere eseguito nel codice SecurityTransparent provoca una richiesta completa per l'autorizzazione di sicurezza con omissione di verifica.

Queste regole vengono applicate durante l'esecuzione da Common Language Runtime (CLR). Il codice SecurityTransparent passa tutti i requisiti di sicurezza del codice richiamato ai relativi chiamanti. Le richieste trasmesse tramite il codice SecurityTransparent non possono elevare il livello di privilegi. Se un'applicazione con attendibilità bassa chiama il codice SecurityTransparent e provoca una richiesta di un livello di privilegi più alto, la richiesta verrà trasferita di nuovo al codice con attendibilità bassa generando un errore. Il codice SecurityTransparent non può arrestare la richiesta perché non può eseguire asserzioni. Se lo stesso codice SecurityTransparent viene chiamato dal codice con attendibilità totale, la richiesta avrà esito positivo.

È necessario applicare la trasparenza in modo esplicito. Quando si utilizza la trasparenza, il codice viene suddiviso in metodi SecurityTransparent e SecurityCritical (il contrario di SecurityTransparent). La maggior parte del codice che gestisce la logica e la manipolazione dei dati può in genere essere contrassegnata come SecurityTransparent, mentre una parte minore di codice che esegue le elevazioni dei privilegi viene contrassegnata come SecurityCritical. All'incirca l'80 percento del codice dovrebbe essere contrassegnato come SecurityTransparent. In questo caso sarà possibile concentrare tutte le attività di controllo e verifica sul 20 percento del codice SecurityCritical.

Per la compatibilità con le versioni precedenti di .NET Framework, tutto il codice che non è annotato con attributi di trasparenza viene considerato SecurityCritical. Non esistono regole per l'analisi del codice per convalidare la trasparenza. Pertanto, è possibile che sia necessario eseguire il debug degli errori di trasparenza di runtime.

Nella tabella riportata di seguito vengono descritti i tre attributi da utilizzare per annotare il codice per la trasparenza.

Attributo

Descrizione

SecurityTransparentAttribute

Consentito solo a livello di assembly. Identifica tutti i tipi nell'assembly come SecurityTransparent. L'assembly non può contenere codice SecurityCritical.

SecurityCriticalAttribute

Se utilizzato a livello di assembly, per impostazione predefinita identifica tutto il codice nell'assembly come SecurityTransparent ma indica che l'assembly può contenere codice SecurityCritical.

Se utilizzato a livello di classe o metodo, identifica la classe o il metodo come SecurityCritical. La classe o il metodo identificati come SecurityCritical possono eseguire le elevazioni dei privilegi.

SecurityTreatAsSafeAttribute

Può essere applicato ai membri SecurityCritical interni o privati per consentire al codice SecurityTransparent dell'assembly di accedere a tali membri. In caso contrario, il codice SecurityTransparent non può accedere ai membri SecurityCritical interni o privati nello stesso assembly. Questa operazione influisce sul codice SecurityCritical con conseguenti possibili elevazioni dei privilegi impreviste.

L'attributo SecurityTreatAsSafeAttribute consente al codice SecurityTransparent di accedere ai membri SecurityCritical nello stesso assembly. Considerare il codice SecurityTransparent e il codice SecurityCritical come se si trovassero in due assembly distinti. Il codice SecurityTransparent non è in grado di vedere i membri privati o interni del codice SecurityCritical. Inoltre, il codice SecurityCritical viene generalmente controllato per l'accesso all'interfaccia pubblica. Uno stato privato o interno non è normalmente accessibile all'esterno dell'assembly, pertanto è consigliabile mantenere lo stato isolato. L'attributo SecurityTreatAsSafeAttribute mantiene l'isolamento dello stato tra il codice SecurityTransparent e il codice SecurityCritical fornendo allo stesso tempo la possibilità di eseguire l'override dell'isolamento quando è necessario. Il codice SecurityTransparent non può accedere ai membri privati o interni del codice SecurityCritical a meno che tali membri non siano stati contrassegnati con SecurityTreatAsSafeAttribute. Prima di applicare l'attributo SecurityTreatAsSafeAttribute, controllare il membro come se fosse esposto pubblicamente.

Se si desidera rendere trasparente un intero assembly per indicare che l'assembly non contiene codice critico e non eleva in alcun modo i privilegi, è possibile aggiungere in modo esplicito la trasparenza all'assembly con l'attributo seguente:

 [assembly: SecurityTransparent]

Se si desidera combinare codice critico e codice trasparente nello stesso assembly, contrassegnare l'assembly con l'attributo SecurityCriticalAttribute per indicare che l'assembly può contenere codice critico, come segue:

 [assembly: SecurityCritical]

Se si desidera eseguire azioni SecurityCritical, contrassegnare in modo esplicito il codice che eseguirà l'azione critica con un altro attributo SecurityCriticalAttribute, come illustrato nell'esempio di codice seguente:

 [assembly: SecurityCritical]
Public class A
{
    [SecurityCritical]
    public void Critical()
    {
        // critical
    }

    public int SomeProperty
    {
        get {/* transparent */ }
        set {/* transparent */ }
    }
}
public class B
{    
    internal string SomeOtherProperty
    {
        get { /* transparent */ }
        set { /* transparent */ }
    }
}

Il codice precedente è trasparente a eccezione del metodo Critical che è contrassegnato in modo esplicito come SecurityCritical. La trasparenza rappresenta l'impostazione predefinita, anche con l'attributo SecurityCriticalAttribute a livello di assembly.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft