Questo articolo è tratto dal libro ASP.NET Core 2 - Guida completa per lo sviluppatore di Daniele Bochicchio, Cristian Civera, Moreno Gentili, Stefano Mostarda e Matteo Tumiati.

Acquista subito la tua copia ad un prezzo vantaggioso!

Estratto dal capitolo 18: "Sicurezza nelle applicazioni ASP.NET Core" (pagine 381-388).

Configurare l'applicazione in maniera sicura

Nel corso del capitolo 3 abbiamo visto come configurare l'applicazione ASP.NET Core usando varie fonti, tra cui i file di testo come appsettings.json. Tipicamente, i file di testo sono sottoposti a controllo di versione insieme al codice sorgente dell'applicazione e perciò non sono consigliati per contenere valori di configurazione sensibili, come API key o chiavi di crittografia, che andrebbero tenuti segreti. Se li aggiungessimo al controllo di versione, infatti, verrebbero divulgati a tutti coloro che hanno accesso al repository. Il problema è particolarmente sentito nei progetti open-source, dove il codice è pubblicamente accessibile da chiunque.

Inoltre, anche le stringhe di connessione contengono informazioni segrete come username e password e, dato che cambiano in base all'ambiente, è opportuno valutare altre fonti di configurazione che mantengano i valori in uno spazio di archiviazione separato dal progetto.

  • Nell'ambiente di sviluppo possiamo valutare User secrets o variabili d'ambiente;
  • Nell'ambiente di staging e produzione usiamo Azure Key Vault o variabili d'ambiente.

Nel corso del capitolo 3 abbiamo già visto come usare le variabili d'ambiente, quindi ci concentreremo su User secrets e Azure Key Vault.

User secrets

Gli User secrets sono una fonte alternativa alle variabili d'ambiente da usare in ambiente di sviluppo. I valori di configurazione che gli affidiamo sono memorizzati all'interno della home directory del nostro utente, perciò in uno spazio separato da quello in cui si trova il progetto. I valori sono salvati in chiaro ma questo è raramente un problema dato che, anche in caso di furto della nostra macchina di sviluppo, il contenuto della home directory è tipicamente accessibile solo entrando col nostro utente.

Prima di iniziare a usare User secrets, dobbiamo indicare lo UserSecretsId all'interno del file .csproj, come si vede nell'esempio 18.33. È importante che tale valore sia univoco per ogni progetto, dato che viene usato come chiave per mantenere isolati i vari contenitori.

Esempio 18.33
<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <UserSecretsId>MyApp1</UserSecretsId>
</PropertyGroup>

La fonte degli user secrets è già aggiunta in ogni applicazione ASP.NET Core in cui sia stato usato il web host builder di default, quindi non sarà necessario apportare ulteriori modifiche al codice. Ci basta usare il sottocomando dotnet user-secrets per impostare le nostre chiavi di configurazione come nell'esempio 18.34. Tali valori saranno poi accessibili dall'applicazione nel modo consueto, ad esempio usando la proprietà Configuration che viene esposta dalla classe Startup o il servizio IOptionsMonitor<T> già visto nel capitolo 3.

Esempio 18.34
dotnet user-secrets set Smtp:Host smtp.example1.com

I due punti sono usati come carattere separatore nel percorso di una chiave gerarchica. I valori invece sono salvati nel file secrets.json situato in una sottodirectory della home dell'utente. Lo specifico percorso è riepilogato dalla tabella 18.1 per ogni sistema operativo.

Tabella 18.1 - Percorsi di archiviazione degli User secrets nei vari sistemi operativi
Sistema operativoPercorso di archiviazione
Windows%APPDATA%\microsoft\UserSecrets\UserSecretsId\
Linux~/.microsoft/usersecrets/UserSecretsId/
macOS~/.microsoft/usersecrets/UserSecretsId/

Il file secrets.json può essere modificato manualmente. Gli utenti di Visual Studio possono raggiungere il file con facilità dal Solution Explorer, cliccando il progetto con il tasto destro e selezionando Manage user secrets dal menu contestuale. Affinché le nuove modifiche abbiano effetto, l'applicazione dovrà essere riavviata.

Essendo una fonte aggiunta in maniera più prioritaria rispetto ai file di testo, User secrets è anche una buona soluzione per ridefinire facilmente i valori presenti in appsettings.json, così che ogni sviluppatore possa adattarli al suo ambiente di sviluppo senza apportare modifiche al file.

Azure Key Vault

Per l'ambiente di produzione, possiamo valutare Azure Key Vault, un servizio cloud per l'archiviazione sicura di chiavi crittografiche e ogni altro genere di valore di configurazione da tenere segreto. I valori sono protetti da crittografia at-rest, eventualmente supportata da moduli hardware dedicati (HMS) in modo da garantire un insuperabile livello di protezione. Inoltre, Azure Key Vault attua anche la crittografia in-transit, in modo che i valori di configurazione possano essere usati in maniera sicura anche all'esterno del datacenter di Azure, da applicazioni situate on-premise. L'accesso alle chiavi è regolato in lettura e in scrittura da un dettagliato sistema di permessi da concedere a utenti, applicazioni o macchine virtuali.

3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

Sicurezza nelle applicazioni ASP.NET Core 1010 1
| 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