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
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
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download



