Відправте пароль користувача поштою


20

Я хочу надіслати електронною поштою нагадування користувачам, щоб увійти на мій веб-сайт із їхнім ім’ям користувача та паролем. Мій скрипт електронної пошти готовий з ідентифікаційним входом, але я не знаю, як розшифрувати пароль користувача.

Хтось може сказати мені, як мені отримати пароль, пов’язаний з обліковим записом користувача?

Відповіді:


31

Ви не можете отримати пароль користувача з того, що Drupal зберігає в базі даних. Drupal не шифрує пароль і зберігає його в базі даних, але зберігає в базі даних хеш пароля, це значення, повернене з односторонньої функції; це означає, що неможливо обчислити значення, яке виникло хеш.
Саме тому хеші зберігаються замість паролів: Якщо хтось отримує доступ до бази даних, що використовується на Drupal-сайті, неможливо отримати паролі та отримати доступ до цього сайту як один із користувачів, зареєстрованих на цьому сайті. (Ще можна було знайти слово з точно таким же хешем; поки що атаки зіткнень показані можливими за короткий час лише з MD5.)

Drupal може надіслати електронний лист, щоб скинути пароль користувача, а це не те, що ви просите, але це може бути корисно, якщо ви хочете, щоб користувачі скинули свій пароль через X місяців. У цьому випадку вас може зацікавити код, використовуваний _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);
    }
  }

4
Так, це нормальна практика безпеки для всіх багатокористувацьких систем. Drupal використовує одноразові URL-адреси для повторного входу пароля. Це означає, що користувачі не отримують своїх необроблених паролів, але отримують спеціальне посилання для входу та встановлення нового. URL-адресу одноразового входу можна знайти в маркері [user:one-time-login-url].
калабро

15

Будь ласка! Не робіть цього!

Впровадити систему входу у веб-додаток дуже просто. Впровадження системи безпечного входу у веб-додаток - це зовсім інша справа. Існує багато аспектів і деталей, які слід врахувати, і Drupal робить чудову роботу, займаючись майже всіма цими аспектами.

Додавання потрібної функції значно знизить безпеку вашої програми. Якщо ви можете розшифрувати паролі, ви лише позбавили вашого додатка дуже важливої ​​програми безпеки.

Інші відповіді пояснюють обхідні шляхи, відповідь BetaRide зробить те, що ви просите, але будьте в курсі, я повністю згоден з його заключною заявою.

В дуже загальному вигляді я б, мабуть, вирішив це більш-менш таким чином:

У спеціальному модулі

  1. Реалізуйте kuck_cron , це створить масив, що містить усі електронні листи, які відповідають критеріям на ваш вибір.

  2. Проведіть цикл через масив і надсилайте електронні листи через drupal_mail. Погляньте на функцію _user_mail_notify() kiamlaluno, пов'язану вище.

Якщо користувач ніколи не входив у систему, можливо , вам доведеться надіслати пошту для скидання пароля (не впевнений тут), можливо, використовуючи комбінацію drupal_mail та kuka_mail_alter, щоб налаштувати або реєстрацію, або скинути пароль електронної пошти за своїм смаком.

Сподіваюся, що це допомагає, я знаю, що це трохи схематично, тому що я не реалізував нічого подібного у своєму досвіді Drupal, я просто викачував кілька ідей про те, як можна сповістити користувачів про безпечний спосіб. Існує багато альтернатив, щоб мати звичайний текстовий пароль в електронній пошті.

Удачий друг, привітаємо вас та з новим роком!


2
Перше речення в цій відповіді потрібно підкреслити жирним шрифтом 16pt, і це, мабуть, одне з небагатьох місць, де мітка моргання могла бути доречною.
всезначний

9

Ви можете використовувати модуль шифрування AES для отримання паролів, що читаються.

Однак є дуже вагомі причини, чому паролі не читаються в стандартному Drupal. IMHO, використовуючи вбудовані в один спосіб посилання на відновлення pw, набагато безпечніше.


0

Ви можете використовувати модуль Token Tokens Module для надсилання пароля поштою

Експериментальний проект

Це проект пісочниці , який містить експериментальний код лише для використання розробником.

Цей невеликий модуль містить маркер пароля облікового запису користувача для налаштувань електронної пошти облікового запису. Адміністратор сайту дозволив надсилати пароль користувачеві в наступних налаштуваннях: -

  1. Ласкаво просимо (новий користувач створений адміністратором)
  2. Ласкаво просимо (не потрібно затвердження)
  3. Активація облікового запису
  4. Ласкаво просимо (не потрібно затвердження, пароль встановлений)
  5. Відновлення паролю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.