2013-04-12 11 views
5

Sto lavorando a un progetto C++ che deve accedere al database per leggerne l'input.Come nascondere la password del database nel file di configurazione

Finora, abbiamo utilizzato un nome utente predefinito (postgres) e una password di "testo chiaro" memorizzata, insieme a molte altre impostazioni, in un file di configurazione basato su xml.

Ora quello che mi serve è nascondere la password agli utenti quando fornisco il file di configurazione.

FYI: l'area di sviluppo è linux, il database è postgresql. vorremmo dare agli utenti il ​​file di configurazione per la connessione al database e utilizzarlo senza conoscere la password

Io apprezzo se lei suggerisce un riferimento rapido e facile. (un piccolo materiale di lettura sarà anche grande)

grazie

+2

Se il database è SQL Server, utilizzare l'autenticazione di Windows in modo da non dover memorizzare una password. –

+0

@brianbeuning l'area di sviluppo è linux, database è postgresql. vorremmo dare agli utenti il ​​file di configurazione per connettersi al database e utilizzarlo senza conoscere la password. – rahman

+2

L'unica soluzione sicura consiste nel fare in modo che un utente digiti la password ogni volta che si avvia il programma. Se si cripta la password, è necessario nascondere la chiave nel programma da qualche parte. La chiave può essere trovata, ma lo sforzo richiesto per ottenere la password aumenta. –

risposta

6

Non è possibile impedire a un utente malintenzionato di ottenere questa password in un modo o nell'altro se si spedisce il programma che lo contiene in qualsiasi forma.

Ma ci sono due possibili soluzioni:

  1. L'utente e la password forniti con il programma di avere un accesso in sola lettura al database;

  2. Il programma non si collega direttamente al database. Richiede i dati a un'applicazione server che non solo è in grado di recuperare questi dati dal database effettivo senza dover fornire all'utente alcuna password, ma può anche eseguire i controlli di sicurezza appropriati per garantire che l'utente acceda solo ai dati che intende utilizzare.

+0

La prima soluzione può ancora consentire all'utente di visualizzare il database che è esattamente ciò che non desidero. La seconda soluzione sembra carina ma "troppo" perfetta per me. Ho bisogno di una soluzione molto più semplice che non richiede un server, ecc. – rahman

+0

Forse solo dare l'accesso ad alcune tabelle? Questo dipenderà molto dal tuo problema specifico. In ogni caso dovresti considerare la seconda soluzione, anche se ritarda il tuo progetto di alcuni giorni. – Havenard

+1

Se vuoi un suggerimento puoi implementare rapidamente qualcosa di simile usando PHP. Il programma esegue richieste HTTP a uno script PHP con i parametri necessari e il PHP restituirà i dati richiesti in formato XML o JSON. Il tuo programma lo analizza e il trucco è fatto. – Havenard

-5

Utilizziamo MD5 per codificare la password nel file di configurazione.

+2

MD5 è un algoritmo di hash unidirezionale. L'hashing della password lo renderebbe illeggibile da tutto * inclusa * l'applicazione. E MD5 è generalmente considerato una scelta sbagliata per tutto ciò che riguarda la sicurezza. –

4

È possibile avere un'altra password "hardcoded", utilizzata per crittografare la password nel file di configurazione. Quindi scrivi la password del database crittografato (db_password) nel file di configurazione, e poi, quando hai bisogno di accedere a un database, decifri il db_password con la tua password hardcoded. Ovviamente, è ancora possibile recuperare la password usando decompilatore, ad esempio, ma non sarà facile.

+0

In realtà è più facile di quanto pensi. Un semplice programma di debug della rete come Wireshark può catturare questa password dal traffico di rete mentre l'applicazione si collega al database. È possibile utilizzare la crittografia più sofisticata al mondo per proteggere questa password nel file XML e non farebbe alcuna differenza qui. – Havenard

+0

@ Havenard Ho letto anche la tua risposta. Sto cercando di capire la tua seconda soluzione, ma non sarà facile e fattibile in 1-2 giorni, a meno che non stia sopravvalutando. – rahman

+0

FreeNickname la tua soluzione è facile (anche se fragile).Potrebbe ancora essere in grado di rispondere temporaneamente al mio requisito. Farò un tentativo ma ho bisogno di un riferimento per una facile crittografia/decodifica in C++. puoi aiutarmi con quello? – rahman