Memorizzazione dei dati sensibili: best practice

8

Recentemente ho iniziato a lavorare su un progetto personale in cui mi stavo connettendo a un database utilizzando Java. Questo mi ha fatto pensare. Devo fornire le informazioni di accesso per un account di database sul server DB per poter accedere al database. Ma se lo inserisco con un codice fisso, sarebbe possibile che qualcuno decompilasse il programma ed estraesse le informazioni di accesso. Se lo memorizzo in un file di installazione esterno, lo stesso problema esiste, solo che sarebbe ancora più facile per loro ottenerlo. Potrei crittografare i dati prima di archiviarli in entrambi i posti, ma sembra che non sia davvero un fail safe e non sono affatto esperto di crittografia. Quindi quali sono le migliori pratiche per la memorizzazione di dati di configurazione sensibili per un programma?

    
posta Kenneth 03.03.2011 - 04:57
fonte

5 risposte

10

Diverse opzioni qui:

  • Esegui il programma Java con un utente di dominio a cui è concesso l'accesso al database (o, in alternativa, memorizza le informazioni sulla password in un file accessibile solo dall'utente che sta eseguendo il tuo programma).

  • usa un keystore, con restrizioni sia per l'utente che per il software che useranno il tasto (come quello che fornisce Mac OS X)

  • utilizza una soluzione di crittografia standard, con un'interfaccia che richiederà l'immissione della password di crittografia all'avvio del programma (quindi l'amministratore che avvia il programma conosce solo la password)

  • richiede che l'uid / password per il database sia inserito all'avvio del programma

risposta data 03.03.2011 - 05:04
fonte
3

La prima regola per l'archiviazione di dati sensibili non è. In questo caso, dovresti probabilmente fare ciò che fa praticamente ogni sistema di autenticazione - rilasciare a ciascun utente le proprie credenziali in modo da non avere questo problema. O problemi come "oh, snap, l'account del database è stato compromesso, ora devo capire come riemettere questa password a tutti gli utenti, compresi quelli che non conosco."

    
risposta data 03.03.2011 - 15:20
fonte
2

Non c'è modo di impedire a chiunque riceve la tua applicazione di imparare il nome utente e la password. Se questo è inaccettabile, allora dovrai mettere del software tra l'applicazione e il database, come un servizio web.

    
risposta data 03.03.2011 - 07:02
fonte
1

In genere si desidera provare e crittografare questo tipo di informazioni. Ad esempio, la pratica generale con lo sviluppo web in .NET è quella di crittografare la sezione del web.config che contiene le stringhe di connessione. L'altro che puoi fare è usare account dominio / windows / os invece di connessioni dirette. Questo ti impedisce di codificare con cura la password nell'app o nei file di configurazione. Invece gestisci le tue connessioni autorizzando l'utente dell'applicazione (o account in cui viene eseguito).

    
risposta data 03.03.2011 - 05:05
fonte
-2

Devi crittografare la tua applicazione in modo che non possa essere decompilata. Non conosco gli strumenti Java, ma sicuramente esistono.

A proposito, dovresti sempre criptare le tue applicazioni per sicurezza! Quindi puoi hardcode se vuoi.

EDIT: Seguendo il commento, stabilirò che è possibile crittografare la propria applicazione, è sufficiente disporre di uno strumento (una sorta di decodificatore "al volo") sul computer dell'utente per eseguire l'app crittografata. Questo è quello che ho usato con Foxpro e probabilmente esiste anche per altre lingue. Forse, però, quel tipo di strumenti non è usato nella tecnologia più recente, ma rende definitivamente impossibile decompilare le mie app mentre funziona bene.

EDIT 2: Alcuni prodotti che ho trovato per la crittografia .NET: link

    
risposta data 03.03.2011 - 05:01
fonte

Leggi altre domande sui tag