Modo sicuro per salvare connectionString in .NET?

1

Sto sviluppando un'applicazione che non è statica per me. Ciò significa che la creazione di un WebService per la mia connessione non funzionerà. Suppongo.

Perché la mia applicazione funziona un po 'come Wordpress. Per prima cosa comunichi all'applicazione la tua connessione al database, quindi l'applicazione si connetterà al database. Ma come posso proteggere questa connectionString?

Per ora ho salvato la connectionString in app.config che è un problema anche perché non posso usare Settings.Default.Upgrade() quando la nuova versione è fuori perché aggiorna solo <userSettings> e non <connectionString> .

Ho anche provato a proteggere la mia connessioneString con RSA che è un problema, perché non posso usare lo stesso programma su altri PC (ad esempio hai un'azienda con due dipendenti e entrambi devono usare il programma e avere accesso al database).

Non ho mai lavorato con un WebService e immagino che non funzionerà per me perché la connessione al database è diversa per ogni persona che usa l'applicazione (come con Wordpress).

    
posta Luranis 23.10.2017 - 10:28
fonte

2 risposte

1

Se diversi utenti si connettono allo stesso database direttamente l'unico modo per renderlo sicuro è assegnare a ciascun utente un diverso account di database (/ password) con diritti solo per accedere ai propri dati - sebbene questo sia più facile a dirsi che a farsi mentre mantenere un layout di database sensato.

Se ogni utente utilizza la stessa stringa di connessione, questo significa che chiunque può estrarre la stringa di connessione dall'applicazione ed eseguire query direttamente sul database. Qualsiasi tipo di crittografia è inutile - se l'app può accedervi in fase di esecuzione ha bisogno della chiave. Ciò significa che chiunque abbia accesso ai file dell'applicazione può ottenere anche la chiave.

Un'alternativa sarebbe quella di effettuare il proxy della connessione attraverso un servizio a cui gli utenti devono autenticarsi (solitamente con un nome utente e una password). Puoi farli memorizzare il loro nome utente / password nell'applicazione in modo che non debbano fornirli ad ogni avvio o persino memorizzare un token cookie / auth una volta autenticato con successo. Normalmente questi giorni sarebbero un servizio REST basato su HTTPS. L'applicazione client invia la richiesta al servizio. Ciò verifica che l'utente sia autorizzato a eseguire quella richiesta e a gestirla restituendo le informazioni. Ciò comporta l'ulteriore vantaggio che il database può essere disattivato dal firewall.

    
risposta data 23.10.2017 - 13:01
fonte
0

Puoi utilizzare l'API di Data Protection (DPAPI).

  1. Crittografia stringa mediante DPAPI e metodi di estensione
  2. Procedura: utilizzare la protezione dei dati
  3. Panoramica della configurazione protetta

"You can use protected configuration to encrypt sensitive information, including user names and passwords, database connection strings, and encryption keys, in a Web application configuration file such as the Web.config file. Encrypting configuration information can improve the security of your application by making it difficult for an attacker to gain access to the sensitive information even if the attacker gains access to your configuration file..."

    
risposta data 22.11.2017 - 12:57
fonte

Leggi altre domande sui tag