¿Cómo puedo evitar tener la contraseña de base de datos almacenada en texto plano en el código fuente?

StackOverflow https://stackoverflow.com/questions/42833

Pregunta

En la web de la aplicación que estoy desarrollando actualmente uso un ingenuo solución cuando se conectan a la base de datos:

Connection c = DriverManager.getConnection("url", "username", "password");

Esto es bastante peligroso.Si un atacante obtiene acceso al código fuente también obtiene acceso a la base de datos.¿Cómo puede mi web-aplicación se conecte a la base de datos sin guardar la base de datos de contraseñas en texto plano en el código fuente?

¿Fue útil?

Solución

Usted puede guardar la cadena de conexión en el Web.config o App.archivo de configuración y cifrar la sección que contiene.He aquí un muy buen artículo que he utilizado en un proyecto anterior para cifrar la cadena de conexión:

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

Otros consejos

En .NET, la convención es para almacenar connectionstrings en un archivo de configuración independiente.

Al respecto, el archivo de configuración pueden ser encriptados.

Si está utilizando Microsoft SQL Server, todo esto se vuelve irrelevante si utiliza una cuenta de dominio para ejecutar la aplicación, que luego utiliza una conexión de confianza a la base de datos.El connectionstring no contendrá los nombres de usuario y contraseñas en ese caso.

Puedo recomendar estas técnicas .NET programadores:

  • Cifrar la contraseña\cadena de conexión en el archivo de configuración
  • Configuración de conexión de confianza entre el cliente y el servidor (es decir,utilizar autenticación de windows, etc)

Aquí es útil artículos de CodeProject:

A menos que me falta el punto de la conexión debe ser gestionada por el servidor a través de un pool de conexiones, por lo tanto, las credenciales de conexión se llevan a cabo por el servidor y no por la aplicación.

Teniendo esto más me suelen construir a una convención donde el frontend de aplicaciones web (en una DMZ) sólo habla a la base de datos a través de un servicio web (en el dominio), por lo que proporciona una separación completa y mejorada de la DB de seguridad.

También, nunca se dan privilegios a la base de datos de la cuenta por encima o por encima de lo que es esencialmente necesario.

Un enfoque alternativo consiste en realizar todas las operaciones a través de procedimientos almacenados, y la concesión de la solicitud de acceso de usuario sólo para estos procedimientos.

Asumiendo que usted está utilizando MS SQL, usted puede tomar ventaja de la autenticación de windows que no requiere de ningún ussername/pasar en cualquier lugar en el código fuente.De lo contrario, tendría que estar de acuerdo con los otros carteles recomendar la aplicación.config + cifrado.

  1. Crear un O/S de usuario
  2. Poner la contraseña en un O/S variable de entorno para que el usuario
  3. Ejecutar el programa como ese usuario

Ventajas:

  1. Solo root o que el usuario puede ver que el usuario de la S/S variables de entorno
  2. Sobrevive el reinicio
  3. Nunca accidentalmente de verificación de la contraseña de control de código fuente
  4. Usted no necesita preocuparse acerca de cagarla permisos de archivo
  5. Usted no necesita preocuparse acerca de dónde se almacena una clave de cifrado
  6. Funciona x-plataforma
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top