Protezione dall'accesso di codice ASP.NET
Aggiornamento: novembre 2007
Uno dei vantaggi derivanti dall'utilizzo di ASP.NET per contenere più siti Web è il supporto di Common Language Runtime per la protezione dall'accesso di codice che consente di proteggere le applicazioni server. Il codice viene assegnato a una classificazione delle aree di protezione basata sulla relativa origine, ad esempio un nome sicuro per un assembly o l'URL di origine del codice.
Le applicazioni che vengono eseguite con attendibilità totale possono ancora essere vincolate da autorizzazioni dei file NTFS, autorizzazioni del database e così via utilizzando l'account di Windows (l'identità del processo ASP.NET) con il quale vengono eseguite. Per ulteriori informazioni, vedere Configurazione dell'identità dei processi ASP.NET.
In generale, è possibile configurare la protezione dall'accesso di codice per un singolo assembly rendendolo un assembly con nome sicuro e aggiungendo criteri di protezione per esso. Poiché tuttavia molti assembly ASP.NET vengono generati dinamicamente durante la compilazione delle pagine, non è possibile assegnare loro un nome sicuro ed è pertanto necessario configurarne i criteri di protezione direttamente. Inoltre, dal momento che ASP.NET supporta le applicazioni senza compilazione, le prove basate su assembly non sono supportate. Dal momento che nelle applicazioni ASP.NET è insito il concetto di strutture di directory, è molto più semplice configurare la protezione dall'accesso di codice in base alle categorie delle applicazioni ASP.NET anziché configurare manualmente .NET Framework in modo che funzioni separatamente con ogni applicazione ASP.NET in un computer distinto.
Per ogni applicazione, ASP.NET consente di assegnare un livello di attendibilità configurabile che corrisponde a un set di autorizzazioni predefinito. Per impostazione predefinita, alle applicazioni viene assegnato un livello di attendibilità commisurato alla prova che presentano. Se si desidera eseguire un'applicazione Web con un set di applicazioni inferiore a Full, è necessario utilizzare uno dei livelli di attendibilità predefiniti specificati in Livelli di attendibilità e file di criteri ASP.NET per applicare un criterio di attendibilità parziale.
Le seguenti impostazioni di configurazione del file Web.config dell'applicazione possono essere utilizzate per eseguire l'override del comportamento predefinito e per associare un'applicazione a un determinato criterio di protezione:
<location path="SampleApp" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
L'elemento di configurazione trust può essere applicato a livello di computer (nel qual caso ogni applicazione ASP.NET viene eseguita a tale livello di attendibilità) oppure a qualsiasi directory principale di applicazione della gerarchia (nel qual caso il livello di attendibilità viene applicato all'applicazione ASP.NET specifica). Se si desidera impostare i criteri per un intero sito, è possibile farlo modificando il file Web.config dell'applicazione principale del sito e specificando la directory principale del sito come percorso, come illustrato nell'esempio seguente:
<location path="ContosoSite" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
È consigliabile impostare l'attributo level dell'elemento di configurazione trust su High per i siti attendibili. Per i siti non attendibili, ad esempio un server Web con siti che eseguono codice di un cliente esterno, è consigliabile impostare l'attributo level dell'elemento di configurazione trust su Medium. Per una descrizione dettagliata dell'esecuzione delle applicazioni ASP.NET con attendibilità media, vedere "How To: Use Medium Trust in ASP.NET 2.0" in Patterns and Practices (PAG): Security Guidance for Applications (informazioni in lingua inglese).
Se si configurano impostazioni di attendibilità al livello di computer o di sito, di norma si imposta l'attributo allowOverride su false nell'elemento location, in modo che le singole applicazioni non possano specificare il proprio livello di attendibilità. Questa impostazione è tipica delle installazioni server condivise.
Nella tabella riportata di seguito sono elencati gli attributi predefiniti supportati per l'elemento di configurazione trust.
Attributo |
Descrizione |
Valori supportati |
---|---|---|
level |
Specifica l'area di protezione in cui verrà eseguita l'applicazione. |
Full, High, Medium, Low e Minimal. |
originUrl |
Specifica un URL o un modello di URL a cui è consentito accedere tramite connessione utilizzando classi dello spazio dei nomi System.Net. Se presente, l'attributo può essere utilizzato per controllare le autorizzazioni di alcuni oggetti, ad esempio di un'istanza di WebRequest, che consentono la connettività a vari percorsi di rete. È possibile, ad esempio, configurare questo attributo con il nome host dei server di una Web farm, in modo che le pagine ASP.NET possano chiamare servizi Web distribuiti nella stessa Web farm dell'applicazione Web. |
URL HTTP ben formati, oppure la sintassi basata su regex supportata da WebPermissionAttribute. |
Nella tabella riportata di seguito sono elencati i tipi di autorizzazione supportati da CLR e i criteri predefiniti per ogni autorizzazione con livelli di attendibilità differenti.
Autorizzazione |
Full |
High |
Medium |
Low |
Minimal |
---|---|---|---|---|---|
Full |
High |
Medium |
Low |
Minimal |
|
Illimitato |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
Read: TEMP, TMP, OS, USERNAME, COMPUTERNAME |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
Read, Write, Append, PathDiscovery:directory dell'applicazione |
Read, PathDiscovery:directory dell'applicazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
AssemblyIsolationByUser, illimitato UserQuota |
1 MB UserQuota (può essere modificato per i singoli siti), AssemblyIsolationByUser |
Nessuna autorizzazione |
|
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
|||
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
||
Illimitato |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
|||
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
|||
Illimitato |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
Connect all'host di origine (se configurata) |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Illimitato |
Illimitato |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
|
Log eventi |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Coda di messaggi |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Controller di servizio |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Contatori di prestazioni |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Servizio di directory |
Illimitato |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Nessuna autorizzazione |
Quando un livello di autorizzazione è disponibile ma non viene esplicitamente menzionato nei criteri di protezione, le applicazioni eseguite con autorizzazioni Full possono sempre utilizzarlo. Le applicazioni eseguite con livelli di attendibilità più bassi non saranno in grado di utilizzare le risorse a meno che non vengano concesse ad esse autorizzazioni esplicite modificando i criteri di protezione.
Come illustrato nella tabella, le applicazioni con set di autorizzazioni High dispongono di autorizzazione di lettura/scrittura per i file contenuti nelle rispettive directory mentre quelle con attendibilità Low dispongono di autorizzazione di sola lettura per i file contenuti nelle rispettive directory. Poiché il tipo FileIOPermission si basa su un percorso fisico (ad esempio, c:\SampleAppPath), ASP.NET utilizza un'istruzione con token nei file dei criteri che viene sostituita in fase di esecuzione con le informazioni sul percorso relative all'applicazione.
Il tipo WebPermission consente all'applicazione di connettersi al percorso di rete definito dall'attributo dell'host originale, utilizzando classi come System.Net.WebRequest. In ASP.NET è possibile configurare questa autorizzazione fornendo un attributo originUrl facoltativo nella sezione trust di una determinata applicazione. L'attributo originUrl sostituisce la variabile $OriginHost$ nei file dei criteri, come illustrato nella sezione seguente del file Web_hightrust.config:
<IPermission class="WebPermission" version="1">
<ConnectAccess>
<URI uri="$OriginHost$"/>
</ConnectAccess>
</IPermission>