2008-09-03 11 views
26

En la aplicación web que estoy desarrollando actualmente utilizo una solución ingenua cuando se conecta a la base de datos:¿Cómo evito tener la contraseña de la base de datos almacenada en texto sin formato en el código fuente?

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

Esto es bastante inseguro. Si un atacante obtiene acceso al código fuente, también obtiene acceso a la base de datos. ¿Cómo puede mi aplicación web conectarse a la base de datos sin almacenar la contraseña de la base de datos en texto plano en el código fuente?

Respuesta

1

puedo recomendar estas técnicas para los programadores .NET: cadena de contraseña \ conexión

  • Cifrar en el archivo de configuración
  • Configuración de confianza conexión entre el cliente y el servidor (es decir, el uso de ventanas de autenticación, etc.)

Aquí se ofrecen artículos útiles de CodeProject:

5

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

Ahí, el config file can be encrypted.

Si está utilizando Microsoft SQL Server, todo esto pasa a ser 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. La conexión no contendrá nombres de usuario y contraseñas en ese caso.

1

A menos que me falta el punto de que la conexión debe ser administrada por el servidor a través de un grupo de conexiones, por lo tanto, las credenciales de conexión son retenidas por el servidor y no por la aplicación.

Tomando esto en cuenta generalmente construyo una convención donde la aplicación web frontend (en una DMZ) solo habla con el DB a través de un servicio web (en dominio), proporcionando una separación completa y una seguridad de DB mejorada.

Además, nunca dé privilegios a la cuenta de db más allá de lo que es esencialmente necesario.

Un enfoque alternativo es realizar todas las operaciones a través de procedimientos almacenados y otorgar a la aplicación acceso de usuario solo a estos procesos.

1

Suponiendo que está utilizando MS SQL, puede aprovechar la autenticación de Windows que no requiere nombre de usuario/pase en ningún lugar en el código fuente. De lo contrario, tendría que estar de acuerdo con los otros carteles que recomiendan app.config + encryption.

0
  1. Crear un O/S de usuario
  2. Ponga la contraseña en una variable S O/medio ambiente para que el usuario
  3. ejecutar el programa como ese usuario

Ventajas:

  1. Solo root o ese usuario puede ver las variables de entorno de O/S de ese usuario
  2. Sobrevive el reinicio
  3. Nunca se comprueba accidentalmente contraseña en el control de la fuente
  4. que no es necesario que preocuparse de atornillar los permisos de archivo
  5. Usted no tiene que preocuparse acerca de dónde almacenar una clave de cifrado
  6. Obras x- plataforma
Cuestiones relacionadas