Usare Medium Trust in ASP.NET 2.0 e 3.5

di Riccardo Golia, in ASP.NET 2.0, Security, CAS,

Uno dei vantaggi nell'utilizzo di ASP.NET per realizzare siti e applicazioni web è il fatto di poter sfruttare la Code Access Security (CAS) del .NET Framework per introdurre restrizioni nel codice e incrementare la sicurezza applicativa. Nell'ambito di uno stesso server più applicazioni possono così essere ospitate in modo più sicuro, dal momento che l'uso di CAS permette di isolare tra loro le diverse applicazioni evitando possibili interferenze e, contemporaneamente, consente di proteggere in modo ancora più efficace l'ambiente operativo da possibili vulnerabilità derivanti da malfunzionamenti o da errori di progettazione.

In generale la quasi totalità delle applicazioni ASP.NET distribuite in ambiente di produzione girano in Full Trust (ovvero senza alcuna restrizione) e vengono limitate nelle loro possibilità unicamente in funzione dell'identity del worker process che le ospita. In questi casi i permessi di accesso ai file, le credenziali di accesso a database e, in generale, la possibilità di accedere alle risorse del sistema dipendono esclusivamente dall'account Windows associato all'applicazione.

L'uso di Code Access Security permette di associare una serie di policy di esecuzione più o meno restrittive indipendenti dall'identity di processo. Solitamente è possibile configurare la CAS per un assembly firmandolo con uno strong name (che poi viene usato come evidence) e definendo un permission set adatto. In ASP.NET 2.0 il meccanismo di configurazione descritto non è applicabile. Questo succede perchè esistono diverse modalità di compilazione e in alcuni casi molti degli assembly sono generati dinamicamente durante le compilazione delle pagine.

Per ovviare alle problematiche sopra esposte, in ASP.NET è possibile settare la CAS all'interno dei file di configurazione, definendo in particolare il livello di trust che corrisponde ad un permission set predeterminato. Pertanto, data un'applicazione ASP.NET, per definire il livello di trust occorre utilizzare il tag trust nel web.config, specificando tramite l'attributo level il livello di trust desiderato. Esistono diversi livelli di trust tramite i quali è possibile introdurre restrizioni per un'applicazione: oltre al già citato Full Trust (nessuna restrizione), i valori possibili sono High, Medium, Low e Minimal. Quest'ultimo valore rappresenta il livello più restrittivo.

Per attivare il livello Medium Trust, occorre modificare il file di configurazione come segue:

<configuration>
  <system.web>
    <trust level="Medium" />
  </system.web>
</configuration>

Quando non si hanno i permessi necessari per eseguire una particolare porzione di codice in quanto è stato configurato un livello di trust restrittivo, viene scatenata dal runtime una SecutityException. Medium Trust limita l'applicazione nell'accesso ai file, al Registro di Sistema, all'Event Log, ai Performance Counter, alle variabili ambientali di sistema, ecc. Rispetto a Low Trust, Medium Trust consente l'accesso a database SQL Server, la connessione ad un server SMTP e la scrittura su filesystem solo all'interno della cartella dell'applicazione.

Come detto, la scelta di un livello diverso da Full Trust limita l'applicazione nelle sue possibilità funzionali, indipendentemente dall'identity di processo. Per fare un esempio, consideriamo questo estratto di codice:

protected override void OnLoad(EventArgs e)
{
  Response.WriteFile(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config");
}

Se all'applicazione è erroneamente associata un'identity di processo che permette di leggere il contenuto delle cartelle di sistema (per esempio, un utente amministratore), il codice mostrato viene eseguito senza problemi, mostrando il testo XML incluso nel file machine.config. Se il livello di trust viene abbassato a Medium Trust senza modificare l'identity di processo, l'operazione non può più essere eseguita e viene scatenata una SecurityException opportuna.

I permessi associati a ciascun livello di trust sono riportati nel dettaglio all'interno della documentazione presente in MSDN Library: http://msdn2.microsoft.com/en-us/library/87x8e4d1.aspx

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi