Tengo un archivo de propiedades en java, en el que almaceno toda la información de mi aplicación, como nombre de archivo de logo, nombre de base de datos, usuario de base de datos y contraseña de base de datos.
Puedo almacenar la contraseña cifrada en el archivo de propiedades.
Pero la clave o frase de contraseña se puede leer desde el contenedor utilizando un decompilador.
¿Hay alguna forma de almacenar el paso de db en un archivo de propiedades de forma segura?Proteger contraseña incrustada
Respuesta
Existen varias formas de administrar esto. Si puede encontrar la forma de que un usuario proporcione una contraseña para un almacén de claves cuando se inicia la aplicación, la forma más adecuada sería encriptar todos los valores usando una clave, y almacenar esta clave en el almacén de claves. La interfaz de línea de comando para el almacén de claves es mediante el uso de keytool. Sin embargo, JSE también tiene API para acceder mediante programación al almacén de claves.
Si no tiene la posibilidad de que un usuario proporcione manualmente una contraseña al almacén de claves al inicio (por ejemplo, para una aplicación web), una forma de hacerlo es escribir una rutina de ofuscación excepcionalmente compleja que pueda oscurecer la clave y almacenarlo en un archivo de propiedad también. Cosas importantes para recordar es que la lógica de ofuscación y desofuscación debe ser de varias capas (podría involucrar cifrado, codificación, introducción de caracteres espurios, etc.) y debería tener al menos una clave que podría ocultarse en otras clases de la aplicación. usando nombres no intuitivos. Este no es un mecanismo completamente seguro ya que alguien con un descompilador y una buena cantidad de tiempo e inteligencia aún pueden solucionarlo, pero es el único que conozco que no requiere que se rompa en código nativo (es decir, no fácilmente descompilable) .
No, no hay. Incluso si lo encriptas, alguien descompilará el código que lo descifra.
Puede crear un archivo de propiedades separado (fuera del contenedor) para las contraseñas (ya sea una contraseña de base de datos directa o una frase de contraseña clave) y no incluir ese archivo de propiedades con la distribución. O puede hacer que el servidor solo acepte ese inicio de sesión desde una máquina específica para que se requiera suplantación.
Almacena un hash SHA1 de la contraseña en su archivo de propiedades. Luego, cuando valide la contraseña de un usuario, compruebe su intento de inicio de sesión y asegúrese de que los dos hashes coincidan.
Este es el código que copiará algunos bytes para usted. Puedes fácilmente ger bytes desde una Cadena usando el método getBytes()
.
/**
* Returns the hash value of the given chars
*
* Uses the default hash algorithm described above
*
* @param in
* the byte[] to hash
* @return a byte[] of hashed values
*/
public static byte[] getHashedBytes(byte[] in)
{
MessageDigest msg;
try
{
msg = MessageDigest.getInstance(hashingAlgorithmUsed);
}
catch (NoSuchAlgorithmException e)
{
throw new AssertionError("Someone chose to use a hashing algorithm that doesn't exist. Epic fail, go change it in the Util file. SHA(1) or MD5");
}
msg.update(in);
return msg.digest();
}
Buena respuesta, pero no a su pregunta. –
Supongo que no entiendo completamente la pregunta entonces. – jjnguy
Quiere guardar el nombre de usuario y la contraseña que la aplicación usará para conectarse a la base de datos.Por lo tanto, debe ser capaz de volver a convertirlo en texto sin formato antes de que se conecte a la base de datos. –
Además de la encriptación de las contraseñas como se describe anteriormente poner ninguna contraseña en las propiedades separadas de archivo y en el despliegue tratar de dar este archivo los permisos más cerradas hacia abajo posible.
Por ejemplo, si su servidor de aplicaciones se ejecuta en Linux/Unix como root
, haga que el archivo de propiedades de contraseña sea propiedad de root
con 400/-r--------
permisos.
¿No podría hacer que la aplicación se ponga en contacto con un servidor a través de https y descargue la contraseña, después de autenticarse de alguna manera, por supuesto?
- 1. contraseña proteger un archivo PDF
- 2. Contraseña proteger la aplicación de iPhone
- 3. Apache .htaccess contraseña proteger con ruta relativa
- 4. Cómo hacer condicional .htaccess contraseña proteger
- 5. ¿Hay alguna manera de proteger la carpeta con la contraseña?
- 6. contraseña de htaccess proteger pero no en el host local
- 7. Cómo proteger con contraseña la transmisión de videos con php
- 8. Manera fácil de proteger con contraseña la página php
- 9. Proteger con contraseña la aplicación web ASP.NET en IIS 7.5
- 10. Depuración incrustada Lua
- 11. expresiones regulares incrustada {{juego
- 12. GroovyShell: ejecución incrustada
- 13. Quicklook vista previa incrustada
- 14. Estrategia de codificación para proteger datos confidenciales
- 15. .htaccess proteger carpeta sin nombre de usuario
- 16. ¿Cómo puedo proteger los parámetros de contraseña en URI de servicio web RESTful?
- 17. .htaccess proteger el directorio de la contraseña pero permitir los tipos de archivos de imagen
- 18. ¿Cómo puedo proteger el nombre de usuario y la contraseña de MySQL de la descompilación?
- 19. Lighttpd: cómo proteger con contraseña las URL que coinciden con la expresión regular
- 20. IIS7 - ¿Cómo proteger con contraseña una sola carpeta utilizando un archivo Web.config?
- 21. ¿Cuándo debe proteger un archivo de clave de nombre seguro con una contraseña?
- 22. Inicializar estructura incrustada en Ir
- 23. cómo proteger mi sitio web
- 24. iPad: cómo proteger el contenido en UItextview?
- 25. Cómo proteger Elmah.axd?
- 26. Cómo proteger .NET DLL's
- 27. Proteger REST y JSON
- 28. Cómo proteger dlls?
- 29. Cómo proteger CouchDB
- 30. Cómo proteger "." ¿carbonizarse?
Si le das a alguien la llave y el candado, pueden duplicar la llave y acceder al candado sin la llave que les diste originalmente. A menos que no proporcione la clave, no hay manera de evitar que lo hagan. Es el defecto fundamental con DRM también. –