Forma segura de guardar la contraseña en el archivo de configuración

8

Estoy desarrollando una aplicación de escritorio y requería conectarme a un servidor de base de datos MySQL remoto. Actualmente guardo toda la información (IP del servidor, puerto TCP, nombre de usuario, contraseña, nombre de la base de datos) necesaria para la conexión en una llamada al archivo de configuración app_config.property .
Me doy cuenta de que esta no es una forma segura de hacer las cosas y me gustaría conocer la manera más segura y profesional de mantener datos seguros como este.

Lo desarrollé en Java 7.0; mi intención es ejecutarlo en Windows 7 y en Ubuntu Linux.

    
pregunta dilee 14.10.2015 - 06:19
fuente

5 respuestas

3

Los datos almacenados en un archivo de texto permanecen allí en claro formato a menos que usted cifre ese archivo.

Como dijo el otro respondedor, es mejor almacenar sus credenciales en la base de datos MySQL. Hash y sal su contraseña (y ¿por qué no usar un pimiento también?)

Enlaces útiles con muy buenas respuestas:

  1. ¿Cómo hash seguro las contraseñas?
  2. ¿Cómo almacenar sal?
  3. ¿Cuál es el propósito de un Pepper?

EDIT:

Siguiendo tus comentarios:

  • Si desea hacer lo mismo que Wordpress, Joomla y otros CMS famosos: cree una tabla separada donde pueda almacenar dicha información.
  • O puede ser que esté hospedando su aplicación web en un servidor en el que está limitado para ordenar la cantidad de bases de datos y tablas dentro de una base de datos que puede crear: en ese caso, puede crear un archivo de configuración de PHP (en su lugar de un archivo de texto) donde almacena esa información y sigue las buenas prácticas en tales situaciones (como proteger la carpeta en la que se encuentra este archivo con un archivo .htaccess )
respondido por el user45139 14.10.2015 - 08:40
fuente
3

Si es posible, no almacene el nombre de usuario y la contraseña en el archivo de configuración, pídale al usuario que le proporcione un nombre de usuario y contraseña cuando abra la aplicación y cree un inicio de sesión para el usuario en la base de datos y solo dé a ese usuario el conjunto mínimo de permisos a las tablas db que necesitan para que la aplicación se ejecute.

enlace

    
respondido por el user89186 14.10.2015 - 07:58
fuente
1

No hay una forma segura de hacerlo. Puede ofuscar, ocultar o hacer lo que quiera, pero si el usuario / contraseña está en un archivo de configuración o dentro del código, nunca será seguro. Alguien siempre puede acceder a los datos / ejecutables y obtener el usuario / contraseña, la única diferencia es la dificultad para obtener esa información (solo leer un archivo o tener que invertir el código del ingeniero). La única forma segura es que el usuario introduzca esos datos.

    
respondido por el YoMismo 14.10.2015 - 08:53
fuente
1

Tome la aplicación web PHP promedio, como Wordpress, y guarda el inicio de sesión en MySQL en texto sin cifrar. Por supuesto, el usuario promedio no puede ver esto, solo los usuarios que tienen acceso al código.

Lo que estoy tratando de decir es que si esto pudiera hacerse de otra manera, probablemente lo haría.

Podría configurar un servicio web que interactúe con la base de datos, y limitar el acceso y los derechos a la base de datos de manera más precisa, pero no estoy seguro de si eso realmente mejora la seguridad, y no tengo tiempo para pensar eso.

Puede limitar los derechos de la base de datos por tabla a lo que sea necesario: seleccionar, actualizar, eliminar y / o insertar.

    
respondido por el SPRBRN 14.10.2015 - 10:32
fuente
1

ofuscar el código lo hará bien, no usaría un archivo de configuración en texto puro.

pero si desea un archivo de configuración, puede tener archivos cifrados en java, yo mismo he escrito algunas aplicaciones de cifrado utilizando AES y PPK (RSA). Encripte el archivo puede cifrar el archivo con una clave que solo el código de su aplicación sabrá o puede usar las ID y las sales de hardware para que no pueda mover el archivo de configuración a diferentes computadoras.

utilizando un flujo de bytes, puedes cifrar y descifrar sobre la marcha sin cambiar los archivos a menos que quieras.

Esta sería mi sugerencia para este escenario específico.

    
respondido por el TheHidden 14.10.2015 - 11:36
fuente

Lea otras preguntas en las etiquetas