Casi he terminado de desarrollar mi sistema de inicio de sesión y hay una cosa más de la que no estoy seguro. Tantos debates que encontré en Internet sobre el conteo de inicios de sesión no válidos y el bloqueo de cuentas de usuarios. Mi sistema almacena los nombres de usuario y las contraseñas (que están salted [para cada usuario salt diferente] y hash) en la base de datos. Si el usuario ingresa un nombre de usuario o contraseña no válidos, hago un seguimiento de su nombre de usuario, contraseña, tiempo de inicio de sesión, ID de sesión, IP y navegador. Aquí está el ejemplo:
LoginID LoginTime LoginUN LoginPW LoginSessionID LoginIP LoginBrowser
1 2018-03-15 13:40:25.000 jpapis test E72E.cfusion 10.18.1.37 Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
98 2018-03-15 13:48:45.000 mhart mypass55 E72E.cfusion 10.12.1.87 Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
32 2018-03-15 14:29:14.000 skatre 1167mmB! 378E.cfusion 10.36.1.17 Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
¿Me pregunto si debo bloquear la cuenta después de X intentos? Si es así, ¿cuál sería la mejor práctica para hacer eso? Aquí hay un enfoque que encontré:
SELECT COUNT(LoginID) AS countID, DATEDIFF(mi,LoginTime,GETDATE ( )) AS TimeElapsed
FROM FailedLogins
WHERE (LoginUN = '#username#' OR LoginSessionID = '#SESSION.sessionid#' OR LoginIP = '#REMOTE_ADDR#')
AND DATEDIFF(mi,LoginTime,GETDATE ( )) <= 60
GROUP BY LoginID, LoginTime
HAVING COUNT(LoginID) >= 5;
La consulta anterior buscará un nombre de usuario, ID de sesión o dirección IP. Si alguno de estos se encuentra en la tabla FailedLogin dentro de los 60 minutos y es mayor que 5, bloquearía la cuenta. El único problema aquí es que no estoy seguro de lo que esto evitaría, el ataque de fuerza bruta puede enviar demasiados intentos en 60 minutos, así que no estoy seguro de cuál sería el beneficio de verificar los inicios de sesión fallidos de esta manera. ¿Hay una mejor manera de manejar los inicios de sesión fallidos ahora días? ¿Debo incluso bloquear la cuenta? Si alguien puede proporcionar algunos pensamientos y ejemplos, por favor hágamelo saber. También quiero compartir algunos detalles sobre el sistema. No tenemos ninguna transacción de dinero en el sistema o vinculada a cuentas de usuario. Tenemos información confidencial en el sistema y es por eso que me gustaría implementar una función de seguridad para evitar que los piratas informáticos intenten romper la contraseña con algunas de las técnicas de piratería informática. Gracias.