Enviar la contraseña del usuario por correo

20

Quiero enviar un recordatorio por correo electrónico a los usuarios para que inicien sesión en mi sitio web con su nombre de usuario y contraseña. Mi script de correo electrónico está listo con la ID de inicio de sesión, pero no sé cómo descifrar la contraseña del usuario.

¿Alguien puede decirme cómo debo obtener la contraseña asociada con una cuenta de usuario?

Hacker
fuente

Respuestas:

31

No puede obtener la contraseña del usuario de lo que Drupal guarda en la base de datos. Drupal no cifra la contraseña y la guarda en la base de datos, pero guarda en la base de datos el hash de la contraseña, que es el valor devuelto por una función unidireccional; Esto significa que no es posible calcular el valor que originó el hash.
Esa es la razón por la cual se guardan los hashes en lugar de las contraseñas: si alguien accede a la base de datos utilizada por un sitio de Drupal, no es posible recuperar las contraseñas y acceder a ese sitio como uno de los usuarios registrados en ese sitio. (Todavía podría ser posible encontrar una palabra con exactamente el mismo hash; hasta ahora, los ataques de colisión se muestran posibles en poco tiempo solo con MD5).

Drupal puede enviar un correo electrónico para restablecer la contraseña de un usuario, que no es lo que está solicitando, pero podría ser útil si desea que los usuarios restablezcan su contraseña después de X meses. En este caso, puede interesarle el código utilizado por _user_mail_notify () .

  // By default, we always notify except for canceled and blocked.
  $default_notify = ($op != 'status_canceled' && $op != 'status_blocked');
  $notify = variable_get('user_mail_' . $op . '_notify', $default_notify);
  if ($notify) {
    $params['account'] = $account;
    $language = $language ? $language : user_preferred_language($account);
    $mail = drupal_mail('user', $op, $account->mail, $language, $params);
    if ($op == 'register_pending_approval') {
      // If a user registered requiring admin approval, notify the admin, too.
      // We use the site default language for this.
      drupal_mail('user', 'register_pending_approval_admin', variable_get('site_mail', ini_get('sendmail_from')), language_default(), $params);
    }
  }
kiamlaluno
fuente
44
Sí, es una práctica de seguridad normal para todos los sistemas multiusuario. Drupal utiliza URL de inicio de sesión únicas para restablecer la contraseña. Significa que los usuarios no obtienen sus contraseñas sin procesar, sino que obtienen un enlace especial para iniciar sesión y establecer una nueva. La URL de inicio de sesión única se puede encontrar en el token [user:one-time-login-url].
kalabro
15

¡Por favor! ¡No hagas eso!

Implementar un sistema de inicio de sesión en una aplicación web es fácil. Implementar un sistema de inicio de sesión seguro en una aplicación web es una cuestión totalmente diferente. Hay muchos aspectos y detalles a considerar, y Drupal hace un buen trabajo al tratar casi todos esos aspectos de forma inmediata .

Agregar la función que solicita reduciría en gran medida la seguridad de su aplicación. Si puede descifrar las contraseñas, acaba de quitarle a su aplicación una medida de seguridad muy importante.

Otras respuestas explican soluciones alternativas, la respuesta de BetaRide haría lo que usted pide, pero tenga en cuenta que estoy totalmente de acuerdo con su declaración final.

De una manera muy general, probablemente abordaría esto más o menos de la siguiente manera:

En un módulo personalizado

  1. Implemente hook_cron , esto generaría una matriz que contiene todos los correos electrónicos que coinciden con los criterios de su elección.

  2. Recorra la matriz y envíe los correos electrónicos a través de drupal_mail. Busque en la función _user_mail_notify() kiamlaluno vinculada a arriba.

Si el usuario nunca ha iniciado sesión, es posible que deba enviar un correo de restablecimiento de contraseña (no estoy seguro aquí), posiblemente utilizando una combinación de drupal_mail y hook_mail_alter para personalizar el registro o el correo electrónico de restablecimiento de contraseña a su gusto.

Espero que ayude, sé que es un poco incompleto ya que no he implementado nada similar en mi experiencia con Drupal hasta el momento, solo estaba dando algunas ideas sobre cómo notificar a los usuarios de manera segura. Hay muchas alternativas para tener una contraseña de texto sin formato en el correo electrónico.

¡Buena suerte amigo, saludos y feliz año nuevo!

Stefgosselin
fuente
2
La primera oración de esta respuesta debe enfatizarse en negrita de 16 puntos, y es quizás uno de los pocos lugares en los que la etiqueta de parpadeo podría haber sido apropiada.
Omnifarious
9

Puede usar el módulo de cifrado AES para obtener contraseñas legibles.

Sin embargo, hay muy buenas razones por las cuales las contraseñas no se pueden leer en Drupal estándar. En mi humilde opinión, usar los enlaces pw-recovery integrados de una manera es mucho más seguro.

BetaRide
fuente
0

Puede usar el Módulo de token de contraseña de cuenta para enviar la contraseña por correo

Proyecto experimental

Este es un proyecto de sandbox , que contiene código experimental para uso exclusivo del desarrollador.

Este pequeño módulo proporciona un token de contraseña de cuenta de usuario para la configuración de correos electrónicos de la cuenta. El administrador del sitio permitió enviar la contraseña al usuario en la siguiente configuración: -

  1. Bienvenido (nuevo usuario creado por el administrador)
  2. Bienvenido (no se requiere aprobación)
  3. Activación de cuenta
  4. Bienvenido (no se requiere aprobación, la contraseña está configurada)
  5. Recuperación de contraseña
Soliyappan
fuente