2011-11-19 25 views
22

Estoy desarrollando una aplicación que lee algunos datos de un db. La conexión a la base de datos se realiza a través del mecanismo de inicio de sesión/contraseña estándar.Java - ¿Cómo almacenar la contraseña utilizada en la aplicación?

El problema es: ¿cómo almacenar la contraseña de db? Si lo guardo como miembro de la clase, puede recuperarse fácilmente mediante una operación de descompilación.

Creo que la ofuscación no resuelve el problema, ya que una contraseña de cadena se puede encontrar fácilmente también en código ofuscado.

¿Alguien tiene alguna sugerencia?

+2

Es su base de datos o la del cliente. Si es la base de datos del cliente, debe saber su contraseña. Si es su base de datos, ¿dónde está ubicada? ¿Por qué una aplicación de cliente accederá directamente a la base de datos, sin pasar por algún servidor donde se almacena la contraseña, y donde el bytecode no está disponible para los clientes? –

+1

Normalmente lo guardo codificado en mi aplicación como una cadena encriptada con Rot13. (bromas). –

+0

Si está utilizando Java EE, existen algunos mecanismos estándar para manejar esto ... pero supongo que no. No creo que ayude a la seguridad a ocultar la contraseña si su aplicación da acceso completo a la base de datos. – toto2

Respuesta

20

Nunca codifique las contraseñas en su código. Esto se mencionó recientemente en el Top 25 Most Dangerous Programming Mistakes

La codificación forzada de una cuenta secreta y una contraseña en su software es extremadamente conveniente: para ingenieros expertos en ingeniería inversa. Si la contraseña es la misma en todo su software, entonces cada cliente se vuelve vulnerable cuando esa contraseña inevitablemente se conoce. Y debido a que está codificado, es un gran dolor solucionarlo.

Debe almacenar la información de configuración, incluidas las contraseñas, en un archivo separado que la aplicación lee cuando se inicia. Esa es la única manera real de evitar que la contraseña se filtre como resultado de la descompilación (para empezar, nunca compilarla en el binario).

Ver esta maravillosa respuesta para una explicación más detallada: By William Brendel

0

Para una aplicación pequeña y simple en el que no desea implicar una gran cantidad de otras medidas de seguridad, esto probablemente debería ser una opción de configuración. Cuando implemente su aplicación, podría leer un archivo de configuración donde se especifican las propiedades de conexión de la base de datos. Esto significa que la aplicación per se no conoce la contraseña, pero necesita obtener acceso al servidor para encontrar la contraseña.

0

Algunos datos deben ser configurables. Justo ahora como usted dijo, puede ser un username y password o algún datas común; Normalmente, lo que hacemos es crear una página de configuración de propiedades. Lo que solía hacer es usar un archivo XML, mantenga su password/username en algún formato encrypted. Puede analizar fácilmente un XML para recuperar su contraseña de conectividad.

Esto garantiza la fiabilidad de que sus contraseñas se pueden cambiar en cualquier momento. Esto se refiere no solo a contraseñas. pero cualquier información que use, que se configurará de vez en cuando.

Cuestiones relacionadas