error de intentos de inicio de sesión lógica

1

Quiero agregar seguridad al inicio de sesión del sistema. Así que aquí está mi idea:

Si un usuario intenta iniciar sesión con un nombre de usuario válido pero con una contraseña no válida, cuéntelo como un intento fallido de inicio de sesión y guárdelo en la base de datos de usuarios para ese usuario específico.

Después de que X haya fallado los intentos de inicio de sesión para ese usuario, realice alguna acción específica (por ejemplo, mostrar captcha). Sin embargo, cuando ese usuario puede iniciar sesión correctamente, reinicie los intentos de inicio de sesión en la base de datos.

¿Es esta lógica efectiva?

    
pregunta jay 22.05.2014 - 10:54
fuente

3 respuestas

6

El problema es que esto solo ayuda si una cuenta en particular es atacada. Pero en lugar de probar 100 contraseñas en una cuenta, un atacante también podría probar una contraseña común en 100 cuentas. Para evitar esto, también debe controlar el número total de inicios de sesión fallidos y comenzar a mostrar CAPTCHAs cuando el número sea excepcionalmente alto.

Para facilitar su uso, los inicios de sesión fallidos deben caducar automáticamente después de un tiempo. No tiene sentido mantener el contador más de, digamos, 24 horas.

Por último, pero no menos importante, tenga cuidado con las condiciones de carrera cuando realmente implemente esto. Muchas personas primero verifican el número de inicios de sesión fallidos y luego incrementan el contador si es necesario. Pero esto le permite a un atacante enviar un número arbitrario de solicitudes simultáneas entre la verificación y el incremento, y cada vez que el servidor todavía "vea" el contador anterior. Necesita una sola consulta donde incremente el contador y obtenga el nuevo valor al mismo tiempo, y luego debe verificar ese valor. Diferentes sistemas de bases de datos tienen diferentes técnicas para esto. En PostgreSQL, puede usar una consulta UPDATE con una cláusula RETURNING . En MySQL, puede usar una consulta UPDATE con la expresión de incremento envuelta en LAST_INSERT_ID() y luego obtener el valor incrementado con SELECT LAST_INSERT_ID() . Tenga en cuenta que no puede realizar una consulta simple SELECT después de la actualización, porque es posible que el contador ya haya aumentado mientras tanto.

    
respondido por el Fleche 22.05.2014 - 13:04
fuente
2

Ese es el enfoque estándar.

Una identificación o contraseña incorrecta debe contar y no debes decirles qué es lo que está mal.

También puede considerar aumentar la demora entre los intentos permitidos.

    
respondido por el Julian Knight 22.05.2014 - 11:11
fuente
1

Sí, eso es más o menos la sesión.

Es necesario tener captcha después de un inicio de sesión inválido varias veces para evitar un ataque de fuerza bruta o si necesita más seguridad, es posible que deba bloquear el acceso si el usuario intentó iniciar sesión de manera no válida.

Si es posible, debe registrar cada intento de inicio de sesión, no solo contar cuántos intentos de inicio de sesión se reiniciaron. Este registro le ayudará a comprender y realizar un seguimiento si hay una violación grave del sistema.

Además, es posible que ya sepas esto. Utilice el hash de una manera más salt para almacenar la contraseña en la base de datos.

    
respondido por el William Calvin 22.05.2014 - 12:10
fuente

Lea otras preguntas en las etiquetas