Wyślij hasło użytkownika pocztą

20

Chcę wysłać wiadomość e-mail z przypomnieniem, aby zalogować się do mojej witryny za pomocą nazwy użytkownika i hasła. Mój skrypt poczty jest gotowy z identyfikatorem logowania, ale nie wiem, jak odszyfrować hasło użytkownika.

Czy ktoś może mi powiedzieć, jak mam uzyskać hasło powiązane z kontem użytkownika?

Haker
źródło

Odpowiedzi:

31

Nie możesz uzyskać hasła użytkownika z tego, co Drupal zapisuje w bazie danych. Drupal nie szyfruje hasła i zapisuje je w bazie danych, ale zapisuje w bazie danych skrót hasła, który jest wartością zwracaną z funkcji jednokierunkowej; oznacza to, że nie można obliczyć wartości, która powstała w wyniku mieszania.
Z tego powodu zamiast haseł zapisywane są skróty: Jeśli ktoś uzyska dostęp do bazy danych używanej przez witrynę Drupal, nie można odzyskać haseł i uzyskać dostępu do tej witryny jako jeden z użytkowników zarejestrowanych w tej witrynie. (Nadal można znaleźć słowo z tym samym hashem; jak dotąd ataki kolizyjne są pokazane jako możliwe tylko w MD5).

Drupal może wysłać wiadomość e-mail w celu zresetowania hasła użytkownika, co nie jest tym, o co prosisz, ale może być pomocne, jeśli chcesz, aby użytkownicy zresetowali hasło po X miesiącach. W takim przypadku możesz być zainteresowany kodem używanym przez _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
źródło
4
Tak, to normalna praktyka bezpieczeństwa dla wszystkich systemów z wieloma użytkownikami. Drupal używa jednorazowych adresów URL logowania do resetowania hasła. Oznacza to, że użytkownicy nie otrzymują surowych haseł, ale otrzymują specjalny link do logowania i ustawienia nowego. Jednorazowy adres URL logowania można znaleźć w tokenie [user:one-time-login-url].
kalabro
15

Proszę! Nie rób tego!

Wdrożenie systemu logowania w aplikacji internetowej jest łatwe. Wdrożenie bezpiecznego systemu logowania w aplikacji internetowej to zupełnie inna sprawa. Jest wiele aspektów i szczegółów do rozważenia, a Drupal świetnie sobie radzi z prawie wszystkimi tymi aspektami po wyjęciu z pudełka.

Dodanie żądanej funkcji znacznie zmniejszy bezpieczeństwo aplikacji. Jeśli możesz odszyfrować hasła, właśnie usunąłeś z aplikacji bardzo ważny komunikat bezpieczeństwa.

Inne odpowiedzi wyjaśniają obejścia, odpowiedź BetaRide zrobiłaby to, o co prosisz, ale pamiętaj, że całkowicie zgadzam się z jego końcowym stwierdzeniem.

W bardzo ogólny sposób prawdopodobnie rozwiązałbym to mniej więcej w następujący sposób:

W niestandardowym module

  1. Zaimplementuj hook_cron , to zbuduje tablicę zawierającą wszystkie e-maile spełniające wybrane kryteria.

  2. Zapętlaj tablicę i wysyłaj wiadomości e-mail za pośrednictwem drupal_mail. Spójrz na funkcję _user_mail_notify() kiamlaluno powiązaną z powyższym.

Jeśli użytkownik nigdy się nie zalogował, może być konieczne wysłanie e-maila z hasłem resetowania (tutaj nie jestem pewien), prawdopodobnie za pomocą kombinacji drupal_mail i hook_mail_alter w celu dostosowania rejestracji lub adresu e-mail hasła resetowania do własnych upodobań.

Mam nadzieję, że to pomaga, wiem, że jest to trochę szkicowe, ponieważ do tej pory nie wdrożyłem niczego podobnego w moim doświadczeniu z Drupalem, właśnie wypompowywałem kilka pomysłów, w jaki sposób można bezpiecznie powiadamiać użytkowników. Istnieje wiele alternatyw dla hasła w postaci zwykłego tekstu w wiadomości e-mail.

Powodzenia przyjacielu, na zdrowie i szczęśliwego nowego roku!

stefgosselin
źródło
2
Pierwsze zdanie tej odpowiedzi należy podkreślić pogrubioną czcionką 16pt i jest to chyba jedno z niewielu miejsc, w których tag blink mógł być odpowiedni.
Wszechobecny
9

Możesz użyć modułu szyfrującego AES , aby uzyskać czytelne hasła.

Są jednak bardzo dobre powody, dla których hasła nie są czytelne w standardowym Drupal. IMHO za pomocą wbudowanych w jeden sposób linków do odzyskiwania pw jest znacznie bezpieczniejsze.

BetaRide
źródło
0

Możesz użyć modułu tokena hasła do konta, aby wysłać hasło pocztą

Projekt eksperymentalny

Jest to projekt piaskownicy , który zawiera eksperymentalny kod wyłącznie do użytku programisty.

Ten mały moduł zapewnia token hasła do konta użytkownika do ustawień konta e-mail. Administrator witryny zezwolił na wysłanie hasła do użytkownika w poniższych ustawieniach: -

  1. Witamy (nowy użytkownik utworzony przez administratora)
  2. Witamy (bez zgody)
  3. Aktywacja konta
  4. Witamy (nie wymaga zatwierdzenia, hasło jest ustawione)
  5. Odzyskiwanie hasła
Soliyappan
źródło