Kirim kata sandi pengguna dalam surat


20

Saya ingin mengirim email pengingat kepada pengguna untuk masuk ke situs web saya dengan nama pengguna dan kata sandi mereka. Skrip email saya sudah siap dengan ID login, tetapi saya tidak tahu cara mendekripsi kata sandi pengguna.

Adakah yang bisa memberi tahu saya bagaimana cara mendapatkan kata sandi yang terkait dengan akun pengguna?

Jawaban:


31

Anda tidak bisa mendapatkan kata sandi pengguna dari apa yang disimpan Drupal dalam database. Drupal tidak mengenkripsi kata sandi dan menyimpannya dalam database, tetapi menyimpan dalam database hash kata sandi, yang merupakan nilai yang dikembalikan dari fungsi satu arah; ini berarti tidak mungkin untuk menghitung nilai yang berasal dari hash.
Itulah alasan mengapa hash disimpan daripada kata sandi: Jika seseorang mengakses database yang digunakan oleh situs Drupal, tidak mungkin untuk mengambil kata sandi, dan mengakses situs itu sebagai salah satu pengguna yang terdaftar di situs itu. (Masih mungkin untuk menemukan kata dengan hash yang sama persis; sejauh ini, serangan tabrakan ditunjukkan mungkin dalam waktu singkat hanya dengan MD5.)

Drupal dapat mengirim email untuk mereset kata sandi pengguna, yang bukan apa yang Anda minta, tetapi bisa membantu jika Anda ingin pengguna mengatur ulang kata sandi mereka setelah X bulan. Dalam hal ini, Anda mungkin tertarik pada kode yang digunakan oleh _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
Ya, ini adalah praktik keamanan normal untuk semua sistem multi-pengguna. Drupal menggunakan satu kali url login untuk mengatur ulang kata sandi. Ini berarti bahwa pengguna tidak mendapatkan kata sandi mentah mereka, tetapi mendapatkan tautan khusus untuk login dan menetapkan yang baru. URL login satu kali dapat ditemukan di token [user:one-time-login-url].
kalabro

15

Silahkan! Jangan lakukan itu!

Menerapkan sistem login pada aplikasi web itu mudah. Menerapkan sistem login yang aman pada aplikasi web adalah masalah yang sama sekali berbeda. Ada banyak aspek dan detail yang perlu dipertimbangkan, dan Drupal melakukan pekerjaan yang baik untuk menangani semua aspek di luar kotak.

Menambahkan fitur yang Anda minta akan sangat mengurangi keamanan aplikasi Anda. Jika Anda dapat mendekripsi kata sandi, Anda baru saja menanggalkan aplikasi Anda dari keamanan yang sangat penting.

Jawaban lain menjelaskan solusinya, jawaban BetaRide akan melakukan apa yang Anda minta, tetapi sadarilah saya sepenuhnya setuju dengan pernyataan penutupnya.

Secara umum, saya mungkin akan menangani ini kurang lebih dengan cara berikut:

Dalam modul khusus

  1. Implementasikan hook_cron , ini akan membangun sebuah array yang berisi semua email yang cocok dengan kriteria pilihan Anda.

  2. Ulangi array dan kirim email melalui drupal_mail. Jangan melihat ke fungsi _user_mail_notify() kiamlaluno terkait dengan di atas.

Jika pengguna belum pernah masuk, Anda mungkin perlu mengirim email kata sandi pengaturan ulang (tidak yakin di sini), mungkin menggunakan kombinasi drupal_mail dan hook_mail_alter untuk menyesuaikan pendaftaran atau mengatur ulang kata sandi email sesuai selera Anda.

Semoga itu bisa membantu, saya tahu ini agak samar karena saya belum menerapkan hal serupa dalam pengalaman Drupal saya sejauh ini, saya hanya memompa beberapa ide tentang bagaimana orang dapat memberi tahu pengguna dengan cara yang aman. Ada banyak alternatif untuk memiliki kata sandi teks biasa di email.

Selamat mencoba teman, bersorak untuk Anda & selamat tahun baru!


2
Kalimat pertama dari jawaban ini perlu ditekankan dalam huruf tebal 16pt, dan mungkin salah satu dari sedikit tempat di mana tag blink mungkin sudah sesuai.
Mahakuasa

9

Anda dapat menggunakan modul enkripsi AES untuk mendapatkan kata sandi yang dapat dibaca.

Namun ada alasan yang sangat bagus mengapa kata sandi tidak dapat dibaca di Drupal standar. IMHO menggunakan tautan pw-recovery satu arah yang jauh lebih aman.


0

Anda dapat menggunakan Modul Token Kata Sandi Akun untuk mengirim kata sandi melalui surat

Proyek Eksperimental

Ini adalah proyek kotak pasir , yang berisi kode eksperimental hanya untuk penggunaan pengembang.

Modul kecil ini menyediakan token kata sandi akun pengguna untuk pengaturan Email akun. Administrator situs diizinkan mengirim kata sandi kepada pengguna dalam pengaturan di bawah: -

  1. Selamat datang (pengguna baru dibuat oleh administrator)
  2. Selamat datang (tidak diperlukan persetujuan)
  3. Aktivasi akun
  4. Selamat datang (tidak diperlukan persetujuan, kata sandi ditetapkan)
  5. Pemulihan kata sandi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.