2011-10-21 21 views
1

私は忘れてしまったパスワードページを作成しています。ログインしてパスワードをリセットできるように一時的なパスワードをメールで送信します。安全な一時的なパスワードを送信する

パスワードを作成する際にはどうすればよいですか。どのような方法が最適ですか。唯一、彼らが一時パスワードを要求されたIPアドレスからのログインを可能にするための試みにおいて$temporarypassword = sha1($_SERVER['REMOTE_ADDR'])

私が持っていたアイデアのようなものです。これを行う最善の方法は何ですか?これまで

コード:

 if(strpos($_SERVER['HTTP_REFERER'],'domain.com') && ($_POST['forgotpasstoken'] == sha1($_SESSION['token'].'forgotpassword'))){ 
     if(isset($_POST['forgotemail']) && !empty($_POST['forgotemail'])){ 
      $email = mysql_escape_string(trim($_POST['forgotemail'])); 

      if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){ 
       echo '<div class="error">Please enter a valid email address.</div>'; 
      } else { 
       $sql = "SELECT email FROM users WHERE email = '$email' LIMIT 1"; 
          $res = mysql_query($sql) or die(mysql_error()); 
           if (mysql_num_rows($res) > 0) { 

            //If email/user exists 
      $temporarypassword = sha1($_SERVER['REMOTE_ADDR']) 
       //EMAIL PASSWORD HERE   

     echo '<div class="success">A temporary recovery password has been emailed to you.</div>'; 
            //If email/user exits 
           } else { 
            echo '<div class="error">This email is not registered.</div>'; 
         } 
      } 

     } else { 
     echo '<div class="error">Please enter an email address.</div>'; 
     } 

} 
+2

私はそのようにすることを提案しません。 IPは変更することができ、人はIPのリセット後にメールを受け取ることができます。 私は完全にランダムなパスワードのようなものを提案していますが、これは短時間しか使用できません。ユーザーに知らせることを忘れないでください。 –

答えて

2

使用だけでランダムな文字列:それは、ユーザが、例えばからログインしようとした可能性が高い以上のものをですiPhoneは失敗し、新しいパスワードを要求し、自宅のPCにいるときにのみリンクを開きます。 IPは異なり、デバイスは異なりますが、すべてが異なります。

1

パスワードをメールで送信している場合は、完全に安全にする方法はありません。電子メールはプレーンテキストで送信されます。また、alfと同様に、ユーザーは要求したIPアドレスと異なるIPアドレスからパスワードをリセットすることができます。

ランダムな文字列を作成し、パスワードリセットページ(リセット要求後)の半分と電子メールの半分の文字列を表示するというオプションもあります。次に、ユーザーが新しいパスワードを選択する前に、両方の半分をフォームに入力するように要求します。

+0

この半分+半分(またはその可能なバリエーションのいずれか)は、本当にスマートなアイデアです!なぜ私は以前にそれを聞いていないのですか? – frnhr

関連する問題