Seguridad y convenciones. DB o archivo?

2

Permítanme comenzar diciendo que conozco los beneficios de una base de datos, pero esa no es la cuestión. Quiero saber si la seguridad tiene sentido con un beneficio adicional de la velocidad.

Usando PHP 7.0,

Prueba 1: tengo una configuración de base de datos con una tabla llamada usuario, con un campo de identificación y una contraseña para un ejemplo. Utilizo la extensión PDO para consultar la base de datos por ID. La solicitud tomó o 0.0005719 microsegundos para completar.

Prueba 2: leí un archivo local que todo lo que contiene es una contraseña con hash.

La solicitud tarda 0.00005912 microsegundos en completarse.

Tenga en cuenta: en ambos casos, las contraseñas se procesan mediante la función hash de contraseña de php. Como este es un cuarto de seguridad, quiero decir eso también. También para la concurrencia, se considera que el archivo es seguro para que lo lea solo una persona a la vez al iniciar sesión solamente.

De cualquier manera, ya que se usaría solo para iniciar sesión, no para obtener detalles, ¿sería seguro? (Los archivos NO se almacenan en la raíz web). Así que alguien necesitaría un inicio de sesión en el servidor, o php actuando como un intermediario para leer el archivo. La base de datos es mysql y requiere un inicio de sesión del servidor más un inicio de sesión mysql.

Pregunta: ¿los beneficios de velocidad para usar un archivo en lugar de una base de datos justifican una buena base para usar un archivo o mantenerlo en la base de datos? ¿Esto plantea algún riesgo de seguridad en un entorno de producción?

Actualización - 23-02-2017 Déjame decirte algunas cosas. 1, un usuario "completo" no se almacena en el archivo, solo una contraseña ya está oculta. No hay necesidad de indexadores porque cuando un usuario inicia sesión en un hash md5 del nombre de usuario se dirige directamente a un archivo en el sistema local. (El nombre de usuario no puede ser cambiado). Esto permitiría un inicio de sesión rápido, sin una consulta de base de datos. 2, la prueba se realizó con los datos ya almacenados justo el momento en que se probaron los datos. 3, es microsegundos, según php microtime. La operación se repitió 100 veces, luego se tomó una diferencia y se promedió. 4, esto es estrictamente hipotético.

    
pregunta Dylan Harty 22.02.2017 - 21:27
fuente

4 respuestas

2

Si las contraseñas se incluyen con sal y hash, entonces el atacante no tiene un valor real. Vaya con lo que sea más sencillo de administrar desde un punto de vista de desarrollo y mantenimiento.

    
respondido por el James Baxter 22.02.2017 - 21:36
fuente
2

En el lado de seguridad de la pregunta, le pido una respuesta a James Baxter.

En lo que respecta al rendimiento, si una décima de microsegundo es realmente un problema, es probable que le sirvan mucho mejor si analiza detenidamente todo el proceso de autenticación. El back-end real es probablemente una gota en el océano en comparación con el enrutamiento de autenticación y todo lo que implica.

Probablementepreocupacionesinnecesarias

Sirealmentenecesitaesavelocidad,entoncesesprobablequeestébienen C10K country y sus necesidades específicas probablemente serán demasiado específicas del dominio para que pueda dar sugerencias sin una comprensión mucho más profunda de cuáles podrían ser los problemas.

Sin embargo, en tal caso, le recomendaría que analice cuidadosamente y evalúe todos los cuellos de botella y posibles impactos de rendimiento. Existen muchas soluciones para el problema de "recuperación rápida de datos con fines de autenticación", y la mayoría de ellas vienen inevitablemente con más problemas propios.

Pasar el "archivo" sobre la "base de datos" (o memcached, o Redis, o mongodb vs MySQL, o ...) para comprimir un poco el rendimiento puede volver y dañar dicho rendimiento en algún momento.

En configuraciones pequeñas, en realidad no importa demasiado de una manera u otra, pero cuando importa , no se debe confiar solo en un parámetro de velocidad. Una vez más, como James Baxter dio a entender, también debe considerar la posibilidad de mantenimiento, y luego hay capacidad de ampliación, escalabilidad, confiabilidad, problemas de bloqueo en caso de actualizaciones, etc.

    
respondido por el LSerni 22.02.2017 - 23:25
fuente
0
  

¿Los beneficios de velocidad para usar un archivo en lugar de una base de datos justifican una buena base para usar un archivo o mantenerlo en la base de datos? ¿Esto plantea algún riesgo de seguridad en un entorno de producción?

En las porciones de microsegundos del reino, absolutamente no. Esto se vuelve mucho más evidente cuando se obtienen muchas entradas que, luego, deben ser indexadas, obtener valor del almacenamiento en caché, son modificadas por los usuarios, etc. Para una futura escalabilidad, use una base de datos.

Hay un beneficio adicional de seguridad al usar una base de datos, y es configurarlo correctamente para que nunca revele el hash de contraseña. Si el servidor web consulta la sal del usuario, calcula el hash y envía el hash a un activador de base de datos que solicita el resultado de una función de comparación, entonces puede eliminar (a través de las permisiones de la tabla) la capacidad del servidor web para leer el hash no importa lo comprometido que se vuelva.

    
respondido por el Jeff Ferland 22.02.2017 - 23:34
fuente
0

Su análisis de rendimiento es defectuoso. Dejando de lado el hecho de que pareces confundir segundos y microsegundos, medir solo el tiempo transcurrido para una sola instancia (o instancias consecutivas) no es una medida realista de rendimiento o capacidad. La capacidad tiene cierta relevancia para la disponibilidad, por lo que forzar el acceso secuencial solo puede tener un impacto adverso en la seguridad al reducir la disponibilidad de su servicio, aunque sospecho que puede quedarse sin ancho de banda de la red antes de quedarse sin procesamiento.

Otra preocupación es que si almacena todas sus cuentas de usuario en un solo archivo plano, tendrá problemas de escalabilidad: es probable que el rendimiento se reduzca con el volumen.

Los DBMS suelen ser complejos y proporcionan acceso a la red (esto también es a veces cierto para los sistemas de archivos), por lo que es probable que el uso de una instancia de dbms dedicada para la autenticación aumente la superficie de ataque del sistema. p>

Pero en general, las diferencias en Seguridad son triviales en comparación con el impacto en la funcionalidad y la escalabilidad.

Vale la pena señalar que no debería estar favoreciendo un mecanismo de hashing de contraseñas basado en la rapidez con la que se encuentra, a menos que pueda garantizar contraseñas de entropía muy altas; no quieres que sea demasiado fácil forzar la contraseña sin conexión.

    
respondido por el symcbean 23.02.2017 - 00:05
fuente

Lea otras preguntas en las etiquetas