Esto podría sonar como una pregunta tonta, pero pensaba que esto era una opción adicional (que no es necesaria) principalmente para usuarios avanzados, que quieren proteger sus cuentas aún más. Consideremos que existen otras medidas de seguridad (por ejemplo, protección contra ataques de fuerza bruta en línea, que requieren contraseñas seguras al registrar / actualizar la contraseña, advirtiendo al usuario de posibles intentos fallidos de inicio de sesión, que requieren información adicional al iniciar sesión desde una IP desconocida o entre dos ubicaciones a distancia en un corto período de tiempo, mostrando la lista de sesiones activas (como en gmail), autenticación de 2 factores, etc.). Por lo tanto, esto es como intentar agregar una capa adicional de seguridad.
Aquí está la idea. Cuando el usuario activa esta opción de seguridad, debe elegir el tipo de variable que debe concatenar con su contraseña habitual cuando intenta iniciar sesión. P.ej. El usuario puede elegir el actual (día + 7). Entonces, si mi contraseña es myPassword
, y la fecha de hoy es 11, entonces tengo que escribir myPassword18
. Lo que significa que si tengo que iniciar sesión otro día, tendré que insertar otra contraseña "total" basada en ese día. Por supuesto, la fecha es un ejemplo, puede ser un tipo de variable diferente, por ejemplo, las primeras 3 letras de mi dirección IP actual (en caso de que el usuario inicie sesión con frecuencia desde diferentes ubicaciones), quizás algo asociado con un navegador (y / o su versión), la idea es tener algo que cambie constantemente, pero el usuario puede identificar fácilmente ese cambio y hacer la entrada correcta.
Aunque esto creará problemas con la contraseña del navegador autocompletada, pero quienes no la necesiten, supongo que no habrá problema desde ese punto de vista.
Validación de la contraseña del usuario durante el inicio de sesión: Estoy utilizando la comprobación / validación de contraseñas como se describe aquí enlace
Por lo tanto, la parte de hash se ve sin problemas y, por supuesto, solo hago la parte myPassword
. Durante la validación, cuando recupero los datos del usuario de la base de datos, puedo verificar y ver si esa opción está habilitada y, en función de la elección del usuario, puedo calcular qué debe concatenarse con la contraseña "principal", por lo que se verificará y será válida. , se cortará de la cadena para validar la contraseña.
Entonces,
- Si esa opción de seguridad está deshabilitada, será una validación de contraseña habitual
- Si está habilitado, digamos que el usuario eligió la opción actual (día + 7), entonces sé que la contraseña debería terminar con 18, si no lo hace, entonces el inicio de sesión falló. Si es correcto, eliminaré ese
18
de la contraseña proporcionada por el usuario y verificaré la validez de la cadena restante comparándola con el hash de la contraseña que se obtuvo de la base de datos.
Admito que, en general, esto hace que el proceso de inicio de sesión sea más complejo (lo cual es malo), pero, por otro lado, creo que podría ser útil si alguien vio su contraseña (directamente o tal vez a través del keylogger, o simplemente cuando hizo clic accidentalmente en guardar en una computadora que no sea de confianza), porque la próxima vez que se cambie esa parte variable (posiblemente) y que el último número / cadena ya sea un poco más, y si el usuario malintencionado intentó iniciar sesión, se notificará al propietario de la cuenta que alguien lo intentó para iniciar sesión desde cualquier ip / ubicación, proporcionando una contraseña válida (la primera parte), aunque no proporcione el segundo parámetro correcto (parte variable), lo que podría ayudar al usuario a cambiar la contraseña "principal" y / o la parte variable de la contraseña .
¿Alguna idea sobre si esto podría mejorar la seguridad o hay algunos defectos que no consideré que tendrán el efecto contrario?
Gracias