2016-11-10 3 views
-2

응용 프로그램을 만드는 중입니다 ... 모든게 지금까지는 괜찮습니다. 내 등록 시스템에서는 준비된 문과 암호 해싱을 사용했으며 양식 입력란에서도 사용자 입력의 유효성을 검사하려고했습니다. 이 시스템을 완료하려면 사용자가 새로운 비밀번호를 요청할 수 있음을 의미하는 비밀번호 찾기 시스템을 만들어야합니다.비밀번호를 잊어 버리지 않았습니다 더하기 비밀번호 해시

무엇을했는지는 모든 파일이 들어있는 테스트 사이트가있어서 프로덕션 사이트에 추가하기 전에 작동하는지 테스트 할 수 있습니다.

잊어 버린 암호로 mysqli를 사용하면 모든 준비가 완료됩니다. 준비된 문을 배우고이 방법을 사용하면 판단하지 않아도됩니다.

내 분실 암호로 인해 문제가 발생하면 암호가 변경되면 업데이트되지 않습니다. 이 스크린 샷을 참조하십시오 : http://prntscr.com/d5hage

또한 위에서 언급 한 바와 같이 http://prntscr.com/d5hbg1을 내 등록 정보에 입력하고 로그인을 확인하십시오. 그러나 잊어 버린 암호에서 어떻게 해싱을 사용했는지, 어떻게 업데이트합니까? 아래의 코드에서 md5는 깨 졌음을 알고 있습니다. 아래 코드를 모두 작성하십시오. 나는 희망

Reset_Password.php

 <?php 

    // include connection 
      require_once('include/connection.php'); 


    if(isset($_POST['submit'])){ 

    $user_id = base64_decode($_GET['encrypt']); 

     $passnew = password_hash($password, $_POST['new_password'], PASSWORD_BCRYPT, array('cost' => 12)); 

    $sql = "UPDATE `olami560_test`.`user` SET `password` =? WHERE `user`.`id` =?"; 
    $stmt = $con->prepare($sql); 
    $stmt->bind_param('si',$passnew, $user_id); 
    $stmt->execute(); 

    if ($stmt->errno) { 
     echo "FAILURE!!! " . $stmt->error; 
    } 
    else echo "Password Changed Successfully.Click on link to login <a href='http://www.olaskee.co.uk/project/allocation/progress/index.php'>Login</a>{$stmt->affected_rows} rows"; 

    $stmt->close(); 

    } 
    ?> 
     <form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" > 
     <label>New Password</label> 
     <input type="password" name="new_password"/> 
     <input type="submit" name="submit" value="Reset" /> 
     </form> 

forgot_password.php

  <?php 
     // include connection 
       require_once('include/connection.php'); 


       if(isset($_GET) && !empty($_GET['email'])){ 
       $email = mysqli_real_escape_string($con,$_GET['email']); 

        $query = "SELECT id 
      FROM `user` 
      WHERE `user_name` LIKE '".$email."' 
      OR `email` LIKE '".$email."'"; 

        $result = mysqli_query($con,$query); 

        $Results = mysqli_fetch_array($result); 
        if(count($Results)>=1) 
        { 
         $query2 = "SELECT email 
      FROM `user` 
      WHERE `user_name` LIKE '".$email."' 
      OR `email` LIKE '".$email."'"; 


        $result2 = mysqli_query($con,$query2); 

        $emailvalue = mysqli_fetch_array($result2); 

         //$token = md5(uniqid(rand(),true)); 
         //$encrypt = md5($Results['id']); 
         $encrypt = base64_encode($Results['id']); 
         $message = "Your password reset link send to your e-mail address."; 
         $to = $emailvalue['email']; 
         $subject="Forget Password"; 
         $from = '[email protected]'; 
         $body= 'Hi, <br/> User <br/>You Requested for Reset Password. <br><br>http://www.olaskee.co.uk/project/allocation/tms/reset_password.php?token='.$token.'&encrypt='.$encrypt.'&action=reset<br/> <br/>--<br>.olaskee<br>'; 
         $headers = "From: " . strip_tags($from) . "\r\n"; 
         $headers .= "Reply-To: ". strip_tags($from) . "\r\n"; 
         $headers .= "MIME-Version: 1.0\r\n"; 
         $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

         mail($to,$subject,$body,$headers); 
         echo $message; 


        } 
        else 
        { 
         $message = "Account not found please signup now!!"; 
         echo $message; 
        } 


     } 
       ?> 

당신이 이해하기에 충분한 설명을 제공합니다. 모든 입력에 감사드립니다.

+0

귀하의 스크린 샷은'password_hash'를 사용하고 있습니다.이 기능에도 똑같은 기능을 사용하지 않으시겠습니까? – apokryfos

+0

왜 내 투표가 실패 했습니까? 내 요청이나 질문에 문제가있는 것은 아닙니까? 의견을 말하십시오.감사합니다 – Olaskee

+0

내가 사용하는 주목할만한 일이 난 여전히 0 행을 업데이 트 – Olaskee

답변

1

좋습니다. 코드를 살펴보면 살펴볼 필요가 있다고 생각되는 몇 가지 사항이 있습니다. 형태 변화에

<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" > 

<form method="post" action="" > 

에이 자체 양식을 제출해야합니다.

해싱 정말 password_hash()는 다음을 사용할 수 있어야하고 새 암호를 두 번, 그는 사용자 입력을하는 것이 좋습니다 비밀번호 재설정 양식에

$passnew = password_hash($password, $_POST['new_password'], PASSWORD_BCRYPT, array('cost' => 12)); 

을 시작하는 것입니다 암호를 올바르게 반복했는지 확인할 수 있습니다.

if($_POST[ 'pass1' ] == $_POST[ 'pass2' ]) // Process else error 

forgot_password.php 파일에서 동일한 sql 문을 두 번 호출하고 있습니다. 한 번 호출하고, 행 수가 1보다 큰지 확인하십시오. 결과 내에서 데이터를 사용하는 경우 동일한 작업을 수행하기 위해 다시 호출 할 필요가 없습니다.

잘하면이 일은 좋은 하루 보내실 것입니다.

+0

입력 해 주셔서 감사합니다 ... 나는 그것을 얻을 수 있지만, 암호를 해시하지 않았다. 여기에 : http : //prntscr.com/d5hror ...하지만 해시 제안을 시도해 보도록하겠습니다. – Olaskee

+0

@Blinkdamo ... 귀하의 제안을 따르지만 변경 사항이있는 것으로 보입니다. 암호는 지금 업데이트되지만 자체는 업데이트되지 않습니다. 이 줄을 사용하고 있기 때문입니까? $ user_id = base64_decode ($ _ GET [ 'encrypt']); ' – Olaskee

+0

그 스크린 샷은 해시 된 암호를 보여줍니다. 남은 의견에 관해서는 미안하다고 말하려는 것을 이해하지 못합니다. – Blinkydamo