Magazine

Dynamic Impersonation in ASP.net

Davide Senatore

17/11/2006

Eseguire codice con il principio del minimo privilegio in ASP.net mediante la Dynamic Impersonation

0%100%
per esprimere un voto รจ necessario registrarsi al sito

ASP.net

 

 

Spesso può capitare che un'applicazione Web voglia utilizzare le credenziali dell'utente collegato per fornire accesso a risorse di sistema, quali file o directories. La soluzione più utilizzata si basa sull'uso dell'elemento <identity> del file web.config, impostato con l'attributo impersonate="true".
Questa soluzione ha come effetto quello di far girare il processo che serve le richieste dell'utente X con le credenziali ed i poteri dell'utente X. La cosa può andare bene nella maggior parte dei casi, ma per il principio del minimo privilegio, sarebbe meglio rimuovere l'impersonamento dell'utente e far sì che solo determinate regioni di codice, ove richiesto, girino con le credenziali dell'utente, mentre il rimanente codice venga eseguito dall'utente NETWORK SERVICE (oppure <NOMEMACCHINA>\ASPNET) o da un altro utente a bassi privilegi.
In ASP.net questo è facilmente realizzabile e possiamo vederlo nel seguente snippet:

 

Response.Write(WindowsIdentity.GetCurrent().Name + "<br>") 

Dim _ctx As WindowsImpersonationContext = CType(User.Identity, WindowsIdentity).Impersonate 

'''============================================================================
''' Da qui in poi il codice viene eseguito con l'identità dell'utente collegato
Response.Write(WindowsIdentity.GetCurrent().Name + "<br>") 

Try
Dim 
_sr As IO.StreamReader = System.IO.File.OpenText(Server.MapPath("SecretFile.xml"))
Response.
Write("File aperto!<br>")
_sr.
Close()
Catch ex As UnauthorizedAccessException
Response.
Write("Non sei autorizzato!<br>")
End Try 

_ctx.Undo()
''' Qui termina il codice eseguito con le credenziali dell'utente connesso
'''============================================================================ 

Response.Write(WindowsIdentity.GetCurrent().Name + "<br>")

Commenti
Nome

Sito web
Commento


indietro