Realizzare applicazioni ASP.NET sicure - Seconda parte

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

L'esecuzione del codice che sfrutta le API di configurazione modifica il file Web.config in questo modo:

<?xml version="1.0"?>
<configuration>
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAv09RvZl80kaAPFxivkIv2gQ
AAAACAAAAAAADZgAAqAAAABAAAABx8+qTz3G1FNcnXsLMwQQ/AAAAAASAAACgAAAAEAA
AACKszDAhWU2bj8Ji3KobpTioAQAAW5VkcGe/lBUjnoGSQgYx6xwJhF1wwGupd0X9cvZ
btHA8rRAdGknW47sT+1SNMn1BEAHy+UuLEGshH8qhyVEvFN0g+GABPKO6wJdrAdf6MZX
rCJCpS/ovle7Zjka9aZjBzfnLRKA8qutDEyvg0kVGyZF/OCDb0mgUrp1b0CDzDwSjQ2z
Bf8D3gggxbnan3k62lzVeuVlELHMNjgoLrH8vaZ0U2IZTt++yHTqIpTct+GrQdbkMPV8
ggRE7k/EGCABzBZK2j+EWJ/3t93M63s56Zh1mTUR9JIBA0GDzF+LPTMvY240JvbOx+44
i+JBoz9FnGWuCy9oYGSPsOyWUn+vUxGwMEf53b2uOtntbRpMeYzCyIivUbfsSoZVjfxQ
c3+5ZUudiKN/qIIMEikd2vuBbRQPArTVltQgFe/vNLO0veivGyw8KgD4yUQF8xFDBk6I
8Gvb7YMUWm2f9INbI4xAY0c69FJRrmlQzqK1jDDLF/Vk4BJzEKZybPJm/ePrRRjsSz15
jDMUeaakOxvUfvdTx4HJfyRR5Kqz8XJRcr4egEf+LGGUsuaEefRQAAABLFydzwRhcVej
flufLz4WTBOr1JA==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
</configuration>

Si noti che la decodifica di una sezione protetta viene eseguita automaticamente durante l'elaborazione, per cui non è richiesto codice aggiuntivo.

string connectionString = ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString;

Per decriptare nuovamente la sezione nel Web.config, occorre eseguire il seguente codice:

// ...
// Se è criptata, la decripto
if (section.SectionInformation.IsProtected)
  section.SectionInformation.UnprotectSection();
// ...

Per maggiori informazioni si veda l'articolo su MSDN: Securing Connection Strings.

Utilizzo della configurazione protetta via aspnet_regiis.exe

La crittografia di una sezione del file di configurazione può anche essere fatta tramite l'utilizzo del comando aspnet_regiis.exe:

  • avviare il prompt dei comandi (cmd.exe) come Administrator;
  • portarsi nella cartella corrispondente alla versione del framework che si desidera utilizzare, ad esempio: cd \WINDOWS\Microsoft.Net\Framework\v2.0.*
  • ;
  • eseguire: aspnet_regiis -pe "connectionStrings" -app "/MyWebSite" dove:
    a) l'opzione -pe "connectionStrings" indica di eseguire la criptazione (-pe) della sezione connectionStrings;
    b) l'opzione -app "MyWebSite" indica il nome dell'applicazione.

La sezione è ora protetta ed ha un aspetto simile al seguente:

<?xml version="1.0"?>
<configuration>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>haOND0NEoBqsJaHL7QoxrNHvjqf6Vuw8uZ0jEzSjEJQSFDqdFYai2/K
eh2lGY6A8Cc22kPHIxpvZIgDjr8EZ+ceL7rpHxJzmoSS6ynAJq9i3RxR3WkycK1n48MM
Jg4s6y994HSj0HtL9LiEyv+XN7ta4yMS8ntus5/kQTgJyZ8o=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>qSDz4yf8SiP6QT68fyykmOtSJPVlpX+NVqgfmpsHqxF45l5F4gLwIf2
3F5/UA3CoPfI7a6Ain3Z+x583LriUpK+5TY4qe4HFqA/XZisax84mKQUWmqFcLRIkCuS
oxQhM7gce2F76kOe31OO7X0Nv6kVy42/OtRWWYIPiJN0YoN2G8FaJeDhBH4WWh4N/Vlp
ix5ZyC1v6R8qLES0qmX5e6slKqLmgKPKzl/1wLQhEfSaJeB+RF2HbMfNKQ4yoXTYTU+C
NATlrhBwBu8mMz1U40wtshAppiq/j+CaMigyadeI=</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
</configuration>

È possibile decodificare una sezione protetta mediante il comando aspnet_regiis con l'opzione -pd: aspnet_regiis -pd "connectionStrings" -app "/MyWebSite"

Maggiori dettagli sono disponibili alla pagina di MSDN sulla crittografia delle informazioni di configurazione utilizzando la configurazione protetta.

Applicare i privilegi minimi necessari

Per impostazione predefinita il processo Aspnet_wp.exe viene eseguito da un account con privilegi sufficienti a garantire le operazioni che normalmente un'applicazione richiede, ma al tempo stesso abbastanza limitato da prevenire alcuni tipi di attacchi.

Scenario

Supponiamo che un'applicazione ASP.NET richieda l'accesso ad una risorsa - ad esempio un file - per cui l'utente di esecuzione non abbia le autorizzazioni necessarie. In questo caso l'applicazione solleverà un'eccezione di tipo "System.UnauthorizedAccessException" all'atto di accedere alla risorsa.

Soluzioni possibili

La soluzione da NON adottare è quella di elevare i privilegi associati all'applicazione. Tipicamente lo sviluppatore pigro risolverebbe il problema aggiungendo nel Web.config:

<!-- APPROCCIO ERRATO -->

<system.web>
  <identity
    impersonate="true"
    userName="Administrator"
    password="123456" />
</system.web>

così da aggirare il problema eseguendo il codice con credenziali di amministratore. Questo approccio è assolutamente da evitare in favore di una soluzione che tenga conto degli impatti sulla sicurezza, come ad esempio modificare opportunamente le autorizzazioni per la singola risorsa, applicando il criterio più restrittivo possibile (se ad esempio si ha solo la necessità di leggere il file, non occorre assegnare i diritti per la scrittura).

Allo stesso modo è da evitare l'elevazione dell'account associato al processo di esecuzione di IIS (IIS Working Process e Application Pool Identity).

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC