2012-02-08 11 views
11

Play framework [Estoy usando v1.2.3] no es compatible con el cifrado de contraseña de db almacenado en la aplicación.conf. Esto se almacena como un archivo de texto sin formato. DBPlugin lee esta propiedad y crea un grupo de conexiones.Cifrado de contraseña de db en application.conf

El requisito es encriptar esta contraseña, por ej. usando Jasypt. Algunas empresas hacen cumplir esto como una medida de seguridad.

¿Alguien ha intentado hacer algo como esto?

Como DBPlugin se carga en ApplicationStart, no hay forma de hackearlo. Eso deja para escribir un complemento personalizado y onConfigurationRead establece un nuevo valor para la contraseña de db de la propiedad application.conf.

¿Alguna sugerencia?

+1

Interesante pregunta, también puede publicar esto en el [Grupo de Google Play] (http://groups.google.com/group/play-framework) para asegurarse de obtener la máxima cobertura. – tmbrggmn

Respuesta

11

Finalmente arreglé esto escribiendo un Play Plugin. Escribir un plugin de Play también es muy fácil. Aquí es el código de ejemplo:

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(); 
    } 

} 

El único inconveniente es que yo no era capaz de utilizar org.jasypt.util.password.StrongPasswordEncryptor - porque no hay un método de descifrado.

+0

Si usa la clase org.jasypt.encryption.StringEncryptor, tiene acceso tanto para encriptar como para descifrar –

1

Bueno, ¿el problema es qué contraseña se debe utilizar para encriptar la contraseña? Si usa una contraseña predeterminada, tampoco es segura. Si lo coloca en el archivo de configuración, tiene un problema recursivo. La única solución que veo es utilizar su propio complemento donde se almacena la contraseña y cambiar los valores en las propiedades de la aplicación. Entonces, la contraseña puede almacenarse crytped sin problemas. Al menos en Play1.x.

+0

jasypt permite buscar la contraseña de cifrado en tiempo de ejecución desde las propiedades env o java del sistema. Esa contraseña nunca necesita registrarse en los sistemas de control de fuente o tener el problema circular resaltado. –

+0

Por favor, nunca ponga una contraseña en la línea de comando. Si usa otro archivo de propiedades, puede usar la funcionalidad de juego directamente. – niels

Cuestiones relacionadas