Senden Sie das Passwort des Benutzers per E-Mail


20

Ich möchte eine Erinnerungs-E-Mail an die Benutzer senden, um sie mit ihrem Benutzernamen und Passwort auf meiner Website anzumelden. Mein Mail-Skript ist mit der Anmelde-ID fertig, aber ich weiß nicht, wie ich das Passwort des Benutzers entschlüsseln soll.

Kann mir jemand sagen, wie ich das mit einem Benutzerkonto verknüpfte Passwort erhalten soll?

Antworten:


31

Sie können das Kennwort des Benutzers nicht von dem abrufen, was Drupal in der Datenbank speichert. Drupal verschlüsselt das Kennwort nicht und speichert es in der Datenbank, speichert jedoch den Hash des Kennworts in der Datenbank. Dies ist der Wert, der von einer Einwegfunktion zurückgegeben wird. Dies bedeutet, dass es nicht möglich ist, den Wert zu berechnen, der den Hash erzeugt hat.
Dies ist der Grund, warum Hashes anstelle der Kennwörter gespeichert werden: Wenn jemand auf die von einer Drupal-Site verwendete Datenbank zugreift, ist es nicht möglich, die Kennwörter abzurufen und als einer der auf dieser Site registrierten Benutzer auf diese Site zuzugreifen. (Es könnte immer noch möglich sein, ein Wort mit genau demselben Hash zu finden. Bisher werden Kollisionsangriffe gezeigt, die nur mit MD5 in kurzer Zeit möglich sind.)

Drupal kann eine E-Mail senden, um das Passwort eines Benutzers zurückzusetzen. Dies ist nicht das, wonach Sie gefragt haben. Es kann jedoch hilfreich sein, wenn die Benutzer ihr Passwort nach X Monaten zurücksetzen sollen. In diesem Fall könnte Sie der von _user_mail_notify () verwendete Code interessieren .

  // 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);
    }
  }

4
Ja, es ist eine normale Sicherheitspraxis für alle Mehrbenutzersysteme. Drupal verwendet einmalige Anmelde-URLs zum Zurücksetzen des Passworts. Dies bedeutet, dass Benutzer nicht ihre unformatierten Passwörter erhalten, sondern einen speziellen Link zum Anmelden und Einrichten eines neuen Passworts erhalten. Die URL für die einmalige Anmeldung finden Sie im Token [user:one-time-login-url].
Kalabro

15

Bitte! Mach das nicht!

Das Implementieren eines Anmeldesystems in einer Webanwendung ist einfach. Ganz anders sieht es bei der Implementierung eines sicheren Anmeldesystems in einer Webanwendung aus. Es gibt viele Aspekte und Details, die berücksichtigt werden müssen, und Drupal erledigt fast alle diese Aspekte auf Anhieb.

Das Hinzufügen der von Ihnen gewünschten Funktion würde die Sicherheit Ihrer Anwendung erheblich beeinträchtigen. Wenn Sie die Passwörter entschlüsseln können, haben Sie Ihrer App gerade eine sehr wichtige Sicherheitsmaßnahme entzogen.

Andere Antworten erläutern Problemumgehungen. Die Antwort von BetaRide würde genau das tun, wonach Sie fragen. Beachten Sie jedoch, dass ich seiner abschließenden Aussage vollkommen zustimme.

Ganz allgemein würde ich das wahrscheinlich in etwa so angehen:

In einem benutzerdefinierten Modul

  1. Implementieren hook_cron , würde dies baut ein Array alle E - Mails enthalten, die die Kriterien Ihrer Wahl entsprechen.

  2. Durchlaufen Sie das Array und senden Sie die E-Mails über drupal_mail. Schauen Sie sich die _user_mail_notify() oben verlinkte Funktion kiamlaluno an.

Wenn sich der Benutzer noch nie angemeldet hat, müssen Sie möglicherweise eine E-Mail- Nachricht zum Zurücksetzen des Kennworts senden (hier nicht sicher). Verwenden Sie möglicherweise eine Kombination aus drupal_mail und hook_mail_alter , um entweder die Registrierung oder die E-Mail- Nachricht zum Zurücksetzen des Kennworts nach Ihrem Geschmack anzupassen.

Ich hoffe, das hilft, ich weiß, es ist ein bisschen lückenhaft, da ich in meiner Drupal-Erfahrung bisher nichts Ähnliches implementiert habe. Ich habe nur ein paar Ideen herausgepumpt, wie man Benutzer auf sichere Weise benachrichtigen kann. Es gibt viele Alternativen zu einem Nur-Text-Passwort in der E-Mail.

Viel Glück Freund, Prost auf dich und frohes neues Jahr!


2
Der erste Satz dieser Antwort muss in 16pt-Fettdruck hervorgehoben werden und ist möglicherweise einer der wenigen Stellen, an denen das Blink-Tag angebracht gewesen sein könnte.
Omnifarious

9

Sie können das AES-Verschlüsselungsmodul verwenden , um lesbare Kennwörter abzurufen.

Es gibt jedoch sehr gute Gründe, warum Passwörter in Standard-Drupal nicht lesbar sind. IMHO mit den eingebauten One-Way-pw-Recovery-Links ist viel sicherer.


0

Sie können das Account Password Token Module verwenden, um ein Kennwort per E-Mail zu senden

Experimentelles Projekt

Dies ist ein Sandbox-Projekt , das experimentellen Code nur für Entwickler enthält.

Dieses kleine Modul bietet ein Benutzerkonto-Kennwort-Token für Konto-E-Mail-Einstellungen. Der Site-Administrator hat das Senden des Kennworts an den Benutzer in den folgenden Einstellungen zugelassen:

  1. Willkommen (neuer Benutzer vom Administrator erstellt)
  2. Willkommen (keine Genehmigung erforderlich)
  3. Account Aktivierung
  4. Willkommen (keine Genehmigung erforderlich, Passwort ist festgelegt)
  5. Passwort-Wiederherstellung
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.