Mysql
 sql >> Database >  >> RDS >> Mysql

Memorizzazione della password dell'account e-mail nel programma server Java/Mysql

I commenti che sottolineano che SMTP non richiede l'autenticazione sono corretti. Detto questo, tutti e tre delle opzioni specificate non sono sicure, presupponendo che il server utilizzi hardware e software di base. Mostrerò perché ognuno è insicuro, anche se non seguirò il tuo ordine originale.

E se qualcuno rubasse il server? Quindi, potevano semplicemente aprire il file o il database, leggere la password e avere immediatamente accesso a tutte le informazioni importanti dell'azienda. Quindi, a meno che tu non abbia guardie armate che circondano il server giorno e notte, questo è già piuttosto insicuro.

Ma peggiora. Nessun sistema informatico è completamente invulnerabile agli attacchi e diversi attacchi ben pubblicizzati (il PlayStation Network di Sony, ad esempio) negli ultimi anni hanno dimostrato che un utente malintenzionato può accedere ai contenuti dei file del disco e dei database senza accesso fisico. Inoltre, dalla tua domanda sembra che il server in questione sia destinato ad accettare pacchetti (richieste HTTP, e-mail in arrivo, ecc.) dal mondo esterno, il che aumenta la tua superficie di attacco.

Questo è allettante, ma è ancora più dannoso dell'opzione 2 o dell'opzione 3. Per prima cosa, un campo stringa finale privato è memorizzato nel file .class generato dal compilatore Java, quindi con questa opzione stai già memorizzando la password non crittografata sul disco rigido del server. Dopo aver compromesso il server come nell'opzione 2 o 3, un utente malintenzionato può semplicemente eseguire javap per ottenere la password in chiaro dal file .class.

Tuttavia, questo approccio amplia ancora di più la tua superficie di attacco. Se la password è memorizzata come parte del codice sorgente, improvvisamente è disponibile per tutti gli sviluppatori che stanno lavorando sul codice. In base al principio del privilegio minimo, gli sviluppatori non dovrebbero conoscere password aggiuntive e c'è un'ottima ragione qui. Se qualcuno degli sviluppatori macchina viene rubata o compromessa dall'esterno, l'attaccante può guardare attraverso il disco rigido della macchina compromessa e ottenere la password in chiaro. Poi c'è il controllo del codice sorgente. Uno dei vantaggi davvero importanti del controllo del codice sorgente è che consente di esaminare qualsiasi versione precedente del codice. Quindi, anche se in futuro si passa a un metodo sicuro, se la password è mai entrata nel controllo del codice sorgente, il server di controllo del codice sorgente è un potenziale punto di attacco.

Tutti questi fattori si sommano per mostrare che, anche se la sicurezza del server HTTP/mail è di prim'ordine, l'opzione 1 aumenta la superficie di attacco così tanto che la sicurezza del server HTTP/mail non aiuta davvero.

Dettagli extra:all'inizio ho specificato "supponendo che il server utilizzi hardware e software di base". Se non stai utilizzando hardware e software di base, puoi eseguire operazioni come l'avvio da un archivio di sola lettura e utilizzare solo un database crittografato, richiedendo a una persona di fornire la chiave di decrittografia ad ogni avvio. Dopodiché, le informazioni decifrate risiedono solo in memoria e non vengono mai scritte su disco. In questo modo, se il server viene rubato, un utente malintenzionato deve scollegare il server e quindi perde tutte le informazioni decifrate che erano solo in memoria. Questo tipo di configurazione viene talvolta utilizzato per un KDC Kerberos (con il server in una scatola chiusa a chiave per una maggiore sicurezza), ma viene utilizzato raramente in altro modo ed è francamente eccessivo quando c'è un modo semplice per risolvere il tuo problema senza andare a tutto questo extra spesa.