Almacenamiento de credenciales de usuario en un archivo o base de datos local

1

Estoy diseñando una aplicación web desde cero.

Desde un punto de vista de seguridad, asumiendo que en ambos casos haré hashing con una sal, un peper y un algoritmo de hashing adecuado.

¿Es mejor almacenar las credenciales de usuario en una tabla de base de datos junto con el resto de los datos, o en su propio archivo local?

Más específicamente, un diseño separado donde la tabla de usuarios de la base de datos contenga el ID de usuario, el nombre, el correo electrónico, etc. Y el ID de usuario, la contraseña, el salt se almacenan en un archivo local en el sistema. ¿Vale la pena diseñar por separado desde un punto de vista de seguridad, con respecto a los posibles vectores de ataque en general y, si tienen éxito, hacer que el sistema sea más resistente?

    
pregunta Wadih M. 31.01.2017 - 02:13
fuente

2 respuestas

1

Parece que estás haciendo todo lo correcto con respecto a la criptografía (sal, pimienta, algo de hashing adecuado). La seguridad adicional que puede obtener al utilizar el sistema de archivos local o al almacenamiento dentro de una base de datos que se ejecuta en una máquina diferente puede no ser significativa.

Si vas al sistema de archivos local

  • Si es posible, active el cifrado a nivel del sistema de archivos.
  • Establezca el permiso de acceso apropiado en el archivo.

Si vas por la ruta DB

  • Asegúrese de que la máquina que ejecuta el servidor de DB esté correctamente reforzada.
  • Si es posible, active el cifrado de base de datos.
  • Asegúrese de que la autenticación del usuario sea necesaria para acceder a la base de datos.
  • Si es posible, asegúrese de que la comunicación entre el servidor de aplicaciones y la base de datos se realice a través de un canal seguro.
respondido por el Sunil Agrawal 31.01.2017 - 02:46
fuente
1

Debería usar una base de datos, por las siguientes razones.

  1. Su servidor web está en DMZ. La DMZ es menos segura que la zona protegida (donde pondría su base de datos), por lo que cualquier archivo que coloque será más vulnerable que los archivos de datos que contienen su base de datos.

  2. Para que las contraseñas ofrezcan la máxima seguridad, debe ser posible para un usuario cambiarlas. Si los almacena en la base de datos, es más fácil cambiarlos. El uso de un archivo plano para su almacenamiento y su actualización con frecuencia puede causar problemas de bloqueo en un entorno de alto volumen; las bases de datos están diseñadas para hacer frente a grandes volúmenes de manera más efectiva.

  3. Si está utilizando un archivo plano local, su solución no se escalará a más de un servidor web. Podría usar una SAN, supongo, pero no estoy seguro de que sea una buena idea darle acceso a la red a su cuenta de servicio del servidor web; este es solo un recurso más que un hacker puede querer explotar.

  4. Una solución de base de datos es más susceptible a no repudio ya que hay registros de transacciones, copias de seguridad, y puedes crear tablas de historial. Si utiliza un archivo plano, un proceso malintencionado se podría mezclar con él y no dejar rastro.

  5. Muchas plataformas de bases de datos ofrecen encriptación . Si bien esto no es una panacea (aún necesita usar hashes, sales y otras mitigaciones), constituye una defensa en profundidad. Cifrar un archivo requeriría un poco más de trabajo y un poco más de riesgo de que la implementación sea incorrecta.

respondido por el John Wu 31.01.2017 - 08:39
fuente

Lea otras preguntas en las etiquetas