2011-10-21 78 views
1

我正在創建一個被遺忘的密碼頁面,並且會通過電子郵件向用戶發送一個臨時密碼,以便他們可以登錄並重置密碼。發送安全臨時密碼

創建密碼時我應該考慮什麼,最好的方法是什麼。

一個想法我已經是這樣的:$temporarypassword = sha1($_SERVER['REMOTE_ADDR'])

在試圖只允許他們從他們所要求的臨時密碼,IP地址登錄。做這個的最好方式是什麼??

到目前爲止的代碼:

 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無法使用,請求新的密碼,並且只有在他家中的電腦上才能打開鏈接。 IPs不同,設備不同,一切都不一樣。

1

如果您通過電子郵件發送密碼,則無法使其完全安全。電子郵件以純文本形式傳輸。就像alf說的那樣,用戶可以用不同於他們請求的IP地址的IP地址來重置密碼。

一個選擇是創建一個隨機字符串,然後在密碼重置頁面(發出重置請求之後)和電子郵件中的一半字符串顯示一半。然後要求用戶在讓他們選擇新密碼之前在表格中輸入兩半。

+0

現在,這半+(或任何可能的變化)是一個聰明的主意!爲什麼我之前沒有聽說過它? – frnhr