es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es seguro enviar el token de recuperación de contraseña utilizando el ID de usuario en lugar del correo electrónico?

Tengo un proyecto Rails + Nuxt con un flujo de recuperación de cuenta.

Un escenario ocurre cuando el Usuario olvida su correo electrónico registrado y su contraseña.
El Usuario puede recordar su correo electrónico ingresando su ID de cuenta.
Rails luego responde con el ID del Usuario y la versión ofuscada del correo electrónico.

En este momento, el Usuario ya conoce su correo electrónico, pero no su contraseña. Entonces hace clic en el botón “Recordar contraseña”.

Por defecto, Devise (la biblioteca de autenticación) espera el correo electrónico completo para poder generar y enviar el enlace de recuperación al Usuario. Pero en este momento, solo está disponible el correo electrónico ofuscado, y no quiero molestar al Usuario haciéndolo llenar el correo electrónico completo, ya que ya sé quién es (a través del ID de cuenta).

Dicho esto, quiero saber si hay alguna preocupación de seguridad sobre anular el método de Devise a continuación para enviar el token de recuperación utilizando el ID del Usuario en lugar del correo electrónico.

“`rb

<h1>Intento de encontrar un usuario por su correo electrónico. Si se encuentra un registro, envía nuevas</h1>

<h1>instrucciones de restablecimiento de contraseña a él. Si no se encuentra el usuario, devuelve un nuevo usuario</h1>

<h1>con un error de correo electrónico no encontrado.</h1>

<h1>Los atributos deben contener el correo electrónico del usuario.</h1>

def send_reset_password_instructions(attributes = {})
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
recoverable.send_reset_password_instructions if recoverable.persisted?
recoverable
end
“`

https://github.com/heartcombo/devise/blob/main/lib/devise/models/recoverable.rb

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en Ruby-on-Rails y seguridad, aconsejo precaución al sobrescribir el método send_reset_password_instructions de Devise para enviar el token de recuperación usando el ID del usuario en lugar del correo electrónico. Si bien esto puede parecer conveniente y minimizar las molestias para el usuario, también plantea preocupaciones de seguridad.

    Una preocupación de seguridad potencial es que el uso del ID del usuario puede ser menos seguro que el uso de su correo electrónico. Los IDs suelen ser enteros secuenciales o incrementales, lo que los hace más fáciles de adivinar que una dirección de correo electrónico aleatoria. Esto abre la posibilidad de que alguien adivine el token de reinicio y acceda a la cuenta del usuario sin su permiso.

    Otra preocupación de seguridad es que un atacante podría obtener o adivinar el ID del usuario y usarlo para solicitar un token de reinicio de contraseña, incluso si no tiene acceso a la dirección de correo electrónico del usuario. Esto permitiría al atacante tomar el control de la cuenta.

    Por lo tanto, generalmente se recomienda seguir el comportamiento predeterminado de Devise, que requiere la dirección de correo electrónico completa del usuario para enviar el enlace de restablecimiento de contraseña. Si decide sobrescribir este comportamiento, debe tomar medidas adicionales para garantizar la seguridad del flujo de recuperación, como implementar límites de velocidad o autenticación de múltiples factores.

Comments are closed.