2012-02-08 21 views
11

Play framework [Sto utilizzando v1.2.3] non supporta la crittografia della password db memorizzata in application.conf. Questo è memorizzato come un file di testo normale. DBPlugin legge questa proprietà e crea un pool di connessioni.Codifica password db in application.conf

Il requisito è crittografare questa password - ad es. utilizzando Jasypt. Alcune aziende lo applicano come misura di sicurezza.

Qualcuno ha provato a fare qualcosa del genere?

Poiché DBPlugin viene caricato su ApplicationStart, non è possibile modificarlo. Questo lascia scrivere un plugin personalizzato e onConfigurationRead imposta un nuovo valore per la proprietà db.password della proprietà application.conf.

Qualche suggerimento?

+1

Domanda interessante, puoi anche pubblicarla sul [Gioca gruppo Google] (http://groups.google.com/group/play-framework) per assicurarti di ottenere la massima copertura. – tmbrggmn

risposta

11

Infine ho risolto questo problema scrivendo un plug-in di riproduzione. Anche scrivere un plugin Play è molto semplice. Ecco il codice di esempio:

package plugin; 

import java.util.Properties; 

import org.jasypt.util.text.StrongTextEncryptor; 

import play.Play; 
import play.PlayPlugin; 

public class DBPasswordInject extends PlayPlugin { 

    @Override 
    public void onConfigurationRead() { 
     StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor(); 
     strongTextEncryptor.setPassword("$Look##$2");// this password has been used to encrypt 

     String encryptedPassword = Play.configuration.getProperty("db.pass"); 
     String decrypted = strongTextEncryptor.decrypt(encryptedPassword); 
     Play.configuration.setProperty("db.pass", decrypted); //override 

     super.onConfigurationRead(); 
    } 

} 

L'unico inconveniente è che non ero in grado di utilizzare org.jasypt.util.password.StrongPasswordEncryptor - perché non esiste un metodo decifrare.

+0

Se si utilizza la classe org.jasypt.encryption.StringEncryptor, è possibile accedere sia a criptare che a decodificare –

1

Bene, il problema è quale password deve essere utilizzata per crittografare la password? Se si utilizza una password predefinita, non è sicuro. Se lo metti nel file di configurazione hai un problema ricorsivo. L'unica soluzione che vedo è utilizzare il proprio plugin in cui è memorizzata la password e modificare i valori nelle proprietà dell'applicazione. Quindi la password può essere memorizzata senza problemi. Almeno in Play1.x.

+0

jasypt consente di cercare la password di crittografia in fase di runtime dalle proprietà di sistema env o java. Quella password non deve mai essere controllata nei sistemi di controllo del codice sorgente o avere il problema circolare che hai evidenziato. –

+0

Non inserire mai una password nella riga di comando. Se si utilizza un altro file di proprietà, è possibile utilizzare direttamente la funzionalità di riproduzione. – niels

Problemi correlati