2011-10-21 2 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은 실패하고 새로운 암호를 요청하며 집에있을 때만 링크를 엽니 다. IP는 다르고 장치는 다르며 모든 것이 다릅니다.

1

비밀번호를 이메일로 보내는 경우 비밀번호를 완벽하게 보호 할 수있는 방법이 없습니다. 전자 메일은 일반 텍스트로 전송됩니다. 그리고 alf와 마찬가지로 사용자는 요청한 것과 다른 IP 주소에서 비밀번호를 재설정 할 수 있습니다.

임의의 문자열을 만든 다음 재설정 요청이 이루어진 후 비밀번호 재설정 페이지에 절반을 표시하고 이메일의 절반을 표시 할 수 있습니다. 그런 다음 사용자가 새 암호를 선택하기 전에 양식에서 두 반쪽을 모두 입력하도록하십시오.

+0

이제이 절반 + 절반 (또는 가능한 변형)이 정말 좋은 아이디어입니다! 왜 내가 어딘가 전에 그것을 듣지 못했을 까? – frnhr