ユーザーのパスワードをメールで送信する


20

ユーザーにリマインダーメールを送信して、ユーザー名とパスワードを使用してWebサイトにログインします。メールスクリプトはログインIDで準備ができていますが、ユーザーのパスワードを復号化する方法がわかりません。

ユーザーアカウントに関連付けられたパスワードを取得する方法を教えてもらえますか?

回答:


31

Drupalがデータベースに保存するものからユーザーのパスワードを取得することはできません。Drupalはパスワードを暗号化せずにデータベースに保存しますが、データベースにパスワードのハッシュを保存します。これは一方向関数から返される値です。つまり、ハッシュを生成した値を計算することはできません。
これが、パスワードではなくハッシュが保存される理由です:誰かがDrupalサイトで使用されているデータベースにアクセスする場合、パスワードを取得し、そのサイトに登録されているユーザーの1人としてそのサイトにアクセスすることはできません。(まったく同じハッシュを持つ単語を見つけることはまだ可能です;これまでのところ、衝突攻撃は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がtokenにあります[user:one-time-login-url]
kalabro

15

お願いします!そんなことしないで!

Webアプリケーションにログインシステムを実装するのは簡単です。Webアプリケーションに安全なログインシステムを実装することは、まったく別の問題です。考慮すべき多くの側面と詳細がありますが、Drupalはこれらの側面のほとんどすべてすぐに使用できるように対処しています。

要求する機能を追加すると、アプリケーションのセキュリティが大幅に低下します。パスワードを復号化できれば、アプリから非常に重要なセキュリティ対策を取り除いただけです。

他の答えは回避策を説明します。BetaRideの答えはあなたが尋ねることをするでしょうが、彼の最後の声明に完全に同意することに注意してください。

非常に一般的な方法で、多かれ少なかれ以下の方法でこれに取り組むでしょう。

カスタムモジュール内

  1. hook_cronを実装すると、選択した基準に一致するすべての電子メールを含む配列が作成されます。

  2. 配列をループし、drupal_mail経由でメールを送信します。_user_mail_notify() 上記にリンクされている関数kiamlalunoを調べてください。

ユーザーが一度もログインしたことない場合は、drupal_mailhook_mail_alterの組み合わせを使用してパスワードのリセットメールを送信する必要あります(ここではわかりません)。

これが役立つことを願っています。これまでのところ、Drupalの経験に似たようなものを実装していないため、少し大ざっぱなことを知っています。安全な方法でユーザーに通知する方法についていくつかのアイデアを汲み出していました。電子メールにプレーンテキストのパスワードを使用する方法には多くの選択肢があります。

幸運の友人、あなたに乾杯&新年あけましておめでとうございます!


2
この回答の最初の文は、16ポイントの太字で強調する必要があり、おそらく点滅タグが適切だった数少ない場所の1つです。
オムニファリアス

9

AES暗号化モジュールを使用して、読み取り可能なパスワードを取得できます。

ただし、標準のDrupalでパスワードが読み取れない理由は非常にあります。一方向に組み込まれたpw-recoveryリンクを使用したIMHOは、はるかに安全です。


0

アカウントパスワードトークンモジュールを使用して、パスワードをメールで送信できます

実験プロジェクト

これは、開発者が使用するための実験的なコードを含むサンドボックスプロジェクトです。

この小さなモジュールは、アカウントの電子メール設定用のユーザーアカウントパスワードトークンを提供します。サイト管理者は、以下の設定でユーザーへのパスワードの送信を許可しました–

  1. ようこそ(管理者が作成した新しいユーザー)
  2. ようこそ(承認不要)
  3. アカウント開設
  4. ようこそ(承認不要、パスワードが設定されています)
  5. パスワードの復元
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.