메일로 사용자 비밀번호 보내기


20

사용자 이름과 비밀번호로 내 웹 사이트에 로그인 할 수 있도록 미리 알림 이메일을 사용자에게 보내려고합니다. 메일 스크립트에 로그인 ID가 준비되었지만 사용자 비밀번호를 해독하는 방법을 모르겠습니다.

누구든지 사용자 계정과 연결된 암호를 어떻게 얻습니까?

답변:


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은 token에서 찾을 수 있습니다 [user:one-time-login-url].
kalabro

15

부디! 하지마!

웹 애플리케이션에서 로그인 시스템을 구현하는 것은 쉽습니다. 웹 애플리케이션에서 보안 로그인 시스템을 구현하는 것은 완전히 다른 문제입니다. 고려해야 할 여러 측면과 세부 사항이 있으며 Drupal은 모든 측면을 즉시 처리하는 훌륭한 작업을 수행 합니다.

요청한 기능을 추가하면 응용 프로그램의 보안이 크게 저하됩니다. 암호를 해독 할 수 있다면 앱에서 매우 중요한 보안 조치를 제거한 것입니다.

다른 답변은 해결 방법을 설명합니다 .BetaRide의 답변은 귀하가 요청한 내용을 수행하지만 그의 성명에 전적으로 동의합니다.

매우 일반적인 방식으로, 나는 아마도 다음과 같은 방식으로 이것을 해결할 것입니다.

맞춤 모듈에서

  1. hook_cron을 구현 하면 선택한 기준과 일치하는 모든 전자 메일이 포함 된 배열이 작성됩니다.

  2. 어레이를 반복하고 drupal_mail을 통해 이메일을 보냅니다. _user_mail_notify() 위와 연결된 kiamlaluno 기능을 살펴보십시오 .

사용자가있는 경우 결코 에 기록, 당신은 할 수 가능성의 조합을 사용하여 암호 재설정 메일을 (하지 않도록 여기에) 보낼 필요가 drupal_mailhook_mail_alter를 등록 또는 귀하의 취향에 암호 재설정 이메일 중 하나를 사용자 정의 할 수 있습니다.

내가 Drupal 경험에서 비슷한 것을 구현하지 않았기 때문에 약간 스케치 된 것을 알기를 바랍니다. 나는 사용자에게 안전한 방식으로 사용자에게 알리는 방법에 대한 몇 가지 아이디어를 쏟아 부었습니다. 전자 메일에 일반 텍스트 암호를 사용하는 방법에는 여러 가지가 있습니다.

행운을 빕니다 친구, 당신에게 건배 & 새해 복 많이 받으세요!


2
이 답변의 첫 번째 문장은 16pt 굵은 글씨로 강조되어야하며 깜박임 태그가 적합한 몇 안되는 장소 중 하나 일 것입니다.
Omnifarious

9

AES 암호화 모듈을 사용하여 읽을 수있는 비밀번호를 얻을 수 있습니다.

그러나 표준 Drupal에서 암호를 읽을 수없는 이유는 매우 많습니다. 내장 된 단방향 pw- 복구 링크를 사용하는 IMHO가 훨씬 더 안전합니다.


0

계정 비밀번호 토큰 모듈을 사용하여 메일로 비밀번호를 보낼 수 있습니다.

실험 프로젝트

이것은 샌드 박스 프로젝트로 , 개발자 전용 실험 코드가 포함되어 있습니다.

이 작은 모듈은 계정 이메일 설정을위한 사용자 계정 비밀번호 토큰을 제공합니다. 사이트 관리자는 다음과 같은 설정으로 사용자에게 암호를 보내도록 허용했습니다.

  1. 환영 (관리자가 만든 새 사용자)
  2. 환영합니다 (승인 불필요)
  3. 계정 활성화
  4. 환영합니다 (승인 필요 없음, 비밀번호 설정)
  5. 비밀번호 복구
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.