Come posso proteggere le password archiviate in web.config?

Ho aggiunto le seguenti impostazioni all’interno del mio file web.config per avviare una chiamata API al sistema esterno. Quindi sto memorizzando l’URL dell’API + nome utente + password come segue: –

    

Quindi, all’interno del mio metodo di azione, farò riferimento a questi valori quando creerò il client web come segue:

 public ActionResult Create(RackJoin rj, FormCollection formValues) { XmlDocument doc = new XmlDocument(); using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); foreach (string key in formValues) { query[key] = this.Request.Form[key]; } query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"]; query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"]; string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"]; 

Ma in questo espongo il nome utente e la password e questi possono essere catturati dagli utenti, quindi la mia domanda è come posso proteggere il nome utente e la password dell’API?

Generalmente, web.config è un file sicuro e IIS non lo serve, quindi non sarà esposto agli utenti che stanno facendo richieste al web server. Il server Web serve solo tipi specifici di file e web.config non è sicuramente uno di essi.

Molto spesso si salva la stringa di connessione del database in essa che include la password. Ora immagina uno scenario in cui web.config non è sicuro. Hai creato una grave minaccia alla sicurezza per la tua applicazione.

Pertanto, specialmente se il tuo progetto non è troppo grande, non dovresti preoccupartene.

Tuttavia, potresti avere un approccio migliore ma creare un progetto chiamato “Risorse” e salvare tutte le informazioni critiche come impostazioni, contenuti, enumerazioni ecc. Sarebbe un approccio pulito e organizzato.

Se stai passando il nome utente / password sul filo (per esempio nel caso di una chiamata API sicura), potresti voler usare https per assicurarti che le informazioni che viaggiano siano crittografate ma che non ha nulla a che fare con la sicurezza di file web.config.

È ansible crittografare il web.config con aspnet_regiis . Questo serve a impedire alle persone con accesso al tuo server di leggere le informazioni sensibili.

A proposito, inserirò le tue impostazioni di configurazione all’interno di una class, che potrà essere iniettata nei tuoi controller – renderà più semplice il test dell’unità.

Il file web.config è solo un file sul file system e quindi dovresti (principalmente) considerare la sua sicurezza nello stesso modo in cui faresti qualsiasi altro file. Non sarà servito da IIS (a meno che tu non apporti modifiche confidenziali a IIS – facile da controllare, prova a richiederlo con un browser)

È buona norma proteggere la directory del sito Web (c: / sites / my-site-here o qualsiasi altra cosa) utilizzando le autorizzazioni della cartella solo per l’utente del dominio delle app del sito Web per leggere i file (e l’utente di distribuzione, se necessario) utilizzando il normale file di Windows permessi

Pertanto potrebbe non essere necessario crittografare se si ha fiducia nella sicurezza del server web. Tuttavia, se si parla di hosting condiviso o di vendita del codice del sito Web o il codice sorgente è pubblico, potrebbe essere opportuno crittografarlo. è un po ‘fastidioso però.

Perché usare Web.config?

Uno dei vantaggi di avere dati in Web.config anziché archiviarli in Costanti, Enumerici, ecc. È che puoi modificare facilmente i dati per diversi ambienti.

Protezione dei dati

Il modo migliore per proteggere i dati in Web.config è crittografarli. Invece di crittografare intere sezioni nel file di configurazione come suggerito da Joe e dall’utente1089766 , puoi semplicemente crittografare la stringa della password e memorizzarla nella configurazione.

Recupero dati

È ansible utilizzare una funzione di supporto come quella sottostante per decrittografare le chiavi.

 private const readonly string decryptKey = ""; public string GetFromConfig(string key) { var encryptedText = System.Web.Configuration.WebConfigurationManager.AppSettings[key]; var plainText = Decrypt(encryptedText, decryptKey); return plainText; } 

In questo modo la chiave di decodifica sarà all’interno del progetto comune per tutti gli ambienti. Ma puoi modificare facilmente i dati nel web.config senza ricompilare la tua app.

PS : puoi modificare decryptionKey e i dati corrispondenti con ciascuna versione per migliorare la sicurezza.