web-dev-qa-db-ja.com

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

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

ユーザーアカウントに関連付けられているパスワードを取得する方法を教えてください。

20
Hacker

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

お願いします!やめろ!

Webアプリケーションにログインシステムを実装するのは簡単です。 secureログインシステムをWebアプリケーションに実装することは、まったく別の問題です。考慮すべき多くの側面と詳細があり、Drupalはそれらの側面のうちすべてについてボックス。

必要な機能を追加すると、アプリケーションのセキュリティが大幅に低下します。パスワードを復号化できる場合は、非常に重要なセキュリティ対策がアプリから削除されています。

他の回答は回避策を説明しており、BetaRideの回答はあなたが求めることを実行しますが、私が彼の締めくくりの文言に完全に同意することに注意してください。

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

カスタムモジュール内

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

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

ユーザーがneverにログインしている場合、mayパスワードのリセットメールを送信する必要があります(ここで確認してください)、おそらく drupal_mailhook_mail_alter の組み合わせを使用して、登録またはパスワードのリセットメールを好みに合わせてカスタマイズします。

私のDrupalエクスペリエンスにこれまでに似たようなものを実装していないので、少しおおざっぱであることを知っているといいのですが、ユーザーに安全な方法で通知する方法についていくつかのアイデアを引き出しています。電子メールにプレーンテキストのパスワードを含める方法には、多くの選択肢があります。

幸運の友人、あなたに乾杯&明けましておめでとう!

15
stefgosselin

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

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

8
BetaRide

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

実験プロジェクト

これは sandbox project で、開発者専用の実験的なコードが含まれています。

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

  1. ようこそ(管理者が作成した新しいユーザー)
  2. ようこそ(承認は不要です)
  3. アカウント開設
  4. ようこそ(承認は不要、パスワードが設定されています)
  5. パスワードの復元
0
Soliyappan