2016-03-21 15 views
0

olarak değişir. Bu kod, imzalı kullanıcı için parolayı değiştirmez, bunun yerine 0 olarak değişir ve sonra tekrar oturum açmama izin vermez. Anlıyorum md5 en güvenli değil çünkü Bu sadece bir proje için aktif bir site olmayacak. Ancak, bir alternatif hakkında önerilere açığım. Parola değiştirdikten sonra her ikisinin de değiştirilmesi gereken parola ve parola2 denilen iki alanım var. Ayrıca, hata iletileri görünmüyor.DB'deki parola alanı 0

<?php 
    session_start(); 
    if (!isset($_SESSION["user_login"])) { 
     header("Location: sign_up.php"); 
    } else { 
      $username = $_SESSION["user_login"]; 
    } 

    include ("connect.php"); 


    ?> 

    <?php 

    //Variables 

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

    $oldpassword = $_POST['oldpassword']; 
    $newpassword1 = $_POST['newpassword1']; 
    $newpassword2 = $_POST['newpassword2']; 




     $pass_query = mysqli_query ($connect, "SELECT * FROM users WHERE email='$username'"); 
     while ($row = mysqli_fetch_assoc($pass_query)) { 

      $existing_pass = $row ['password']; 


      //Checking if md5 encrypted password matches 
      $md5_oldpassword = md5($oldpassword); 
      //check if the old password and the old password entered now match 
      if ($md5_oldpassword == $existing_pass){ 
       //check if the two new passwords match 
       if ($newpassword1 == $newpassword2) { 

        $md5_newpassword = md5($newpassword1); 
        $md5_newpassword2 = md5($newpassword2); 
        //Query to update the password 
        $password_update_query = mysqli_query($connect, "UPDATE users SET password='$md5_newpassword' AND password2='$md5_newpassword2' WHERE email='$username'"); 

        echo "Your password has now changed!"; 

        } 
        else{ 

         echo "Your new password and re entered password does not match. Please try again."; 
         } 
       } 
       else { 
        echo "Your old password does not match. Please try again."; 
        } 
      } 

     } 


    ?> 
    <div class="container"> 
    <h3> Change your Password: </h3> 
    <form action="" method="POST" enctype="multipart/form-data"> 
     <div class="form-group"> 
      <label for="oldpassword">Old Password:</label> 
      <input type="oldpassword" class="form-control" name="oldpassword" placeholder="Enter old password" > 
     </div> 
     <div class="form-group"> 
      <label for="newpassword1">New Password:</label> 
      <input type="newpassword1" class="form-control" name="newpassword1" placeholder="Enter new password" > 
     </div> 
     <div class="form-group"> 
      <label for="newpassword2">New Password:</label> 
      <input type="newpassword2" class="form-control" name="newpassword2" placeholder="Re-Enter new password" > 
     </div> 
     <center> 
     <button type="submit" class="btn btn-primary" name="change_pass_submit" style=" background-color:#337AB7; color:white;">Change Password</button> 
     </center> 

    </form> 
    </div> 
+0

Merak etme, neden tabloda iki kez aynı değeri * saklıyorsunuz? – David

+0

... ve neden MD5? * "Geleceğe Dönüş" ün * çok fazla kez izledin mi? –

+0

@David kullanıcı kaydettiğinde doğrulama için. –

cevap

2

Sorgunuzda bir hata var:

"UPDATE users SET password='$md5_newpassword' AND password2='$md5_newpassword2' WHERE email='$username'" 

Olmalıdır: Ancak


"UPDATE users SET password='$md5_newpassword', password2='$md5_newpassword2' WHERE email='$username'" 
, sorgunuzdaki hata burada DEĞİL büyük sorundur . BÜYÜK sorunun kod ÇOK GÜVENSİZ olmasıdır:

  1. O sql injection karşı savunmasızdır: Kötü niyetli ile
    herkes bunlar veritabanı ile gibi şey yapabileceğini düşünüyoruz. prepared statements'u kullanmaya başlamanız gerekir (PHP'de PDO'a bakın).
  2. Şifreleriniz düzgün bir şekilde yanlış değil!
    Kullanım PHP'nin fonksiyonları inşa: password_hash ve yerine md5 ait password_verify (md5 karma algoritması eski onunla çeşitli sorunlar tespit edilmiştir şifre karma için, meselenin hızlı olacak şekilde tasarlanmıştır olmasıdır Hızlı öyle gelir... easy to crack. Hızlı, özel donanımın 350 billion guesses per second yapabilir.