Per iniziare: sono d'accordo con te sul fatto che il pezzo di William Brandl penda più sulla convenienza che sulla sicurezza. Potrei persino dire che ha torto quando dice che archiviare le credenziali in un file è l'unica strada da percorrere. Almeno quando lascia fuori qualsiasi parte riguardante la crittografia. Il link che fornisce al articolo CWE-259 dice anche specificamente che:
Username and password information should not be included in a configuration file or a properties file in plaintext as this will allow anyone who can read the file access to the resource. If possible, encrypt this information and avoid CWE-260 and CWE-13.
Il fatto è che, indipendentemente da cosa hai deciso di fare, un utente malintenzionato con accesso ai tuoi file sarà in grado di rubare le tue credenziali.
Dato che stai usando il server con un utente con privilegi bassi, con accesso limitato e una password sicura, sei generalmente abbastanza sicuro. Finché blocchi tutti gli utenti, dai ai tuoi utenti del database solo i privilegi minimi richiesti, ecc. Probabilmente non avrai problemi.
File separato
Potresti considerare di archiviare le credenziali in un file separato, solo per tua comodità. Questo perché è possibile scambiare facilmente nuove credenziali se si decide di modificare il database. In questo modo, non è necessario ricompilare la fonte.
Potresti anche crittografare le credenziali memorizzate in quel file separato. Ciò richiede tuttavia che il codice decodifichi la chiave, il che significa che la chiave di decrittografia si trova nei file Java compilati. Questa è davvero solo sicurezza attraverso l'oscurità (ad esempio un falso senso di sicurezza), e onestamente non aggiunge molto. Tuttavia, aumenterà leggermente la difficoltà, anziché solo un nome utente e una password in testo semplice.
Start-up
L'unica cosa che posso suggerire per renderlo più sicuro, evitando l'hardcoding e l'archiviazione delle credenziali in un file separato, è quello di fornire le credenziali all'avvio. Ciò sarà più ingombrante dal punto di vista tecnico (ad esempio, dovrai riavviare manualmente il server ogni volta che si interrompe), ma almeno rimuoverà tutti i problemi relativi a dove archiviare le credenziali.
Tuttavia, le credenziali saranno memorizzate. Quindi, se un utente malintenzionato vuole davvero ottenere le credenziali, un dump della memoria potrebbe essere tutto ciò che serve, indipendentemente da dove si memorizzano le credenziali.
Sommario
Dico, per tua comodità, di memorizzare le credenziali in un file, ma non preoccuparti se hai voglia di conservare le credenziali nel codice sorgente. (Fai attenzione ai programmatori che stanno rivedendo il tuo codice, perché è una cattiva pratica ;-)). Anche in questo caso, assicurati di monitorare il tuo server, assicurati di applicare un tipo di politica dei privilegi minimi agli utenti e ai servizi e assicurati che tutte le credenziali siano uniche e forti.
Nota:
Per i futuri lettori; Questo non vuol dire che non dovresti preoccuparti di come gestisci le credenziali. Molti framework e linguaggi offrono modi per crittografare e proteggere le tue credenziali e il seguire le migliori pratiche è sempre incoraggiato. Ma il fatto è che se qualcuno ha accesso ai tuoi file, di solito sei sfortunato. Quindi proteggi i tuoi file!