2014-09-30 44 views
-4

在我的changepassword表單上,問題是當我去更改密碼時,它不讓我輸入我當前的密碼,而是它需要md5哈希密碼。一旦輸入,它會被髮送散列,因此部分是好的。當前密碼必須輸入哈希值?

<?php 
    include 'core/login.php'; 
    include 'core/init.php';  
    include 'includes/head.php';  
    if(count($_POST)>0) { 
    $result = mysqli_query($link, "SELECT *from users WHERE id='" . $_SESSION["id"] . "'"); 
    $row=mysqli_fetch_array($result); 
    if($_POST["currentPassword"] == $row["password"]) { 
    mysqli_query($link, "UPDATE users set `password`='" .md5(md5($_POST['password'])) . "' WHERE id='" . $_SESSION["id"] . "'"); 
    $message = "Password Changed"; 
    } else $errormessage = "Current Password is not correct"; 
    } 
?> 

形式是

<form name="frmChange" method="post" action="" onSubmit="return validatePassword()"> 
        <div class="form-group"> 
         <label>Change Password*</label> 
         <input type="text" name="currentPassword" class="form-control input-md" /> 
        </div> 
        <div class="form-group"> 
         <label>New Password*</label> 
         <input type="text" name="newPassword" class="form-control input-md" /> 
        </div> 
        <div class="form-group"> 
         <label>Confirm Password*</label> 
         <input type="text" name="confirmPassword" class="form-control input-md" /> 
        </div>       
        <br />     
        <div class="text-center"> 
         <input type="submit" name="submit" class="btn btn-success" value="Submit" />   
        </div>          
       </form>  

和JS是...

<script> 
function validatePassword() { 
var currentPassword,newPassword,confirmPassword,output = true; 

currentPassword = document.frmChange.currentPassword; 
newPassword = document.frmChange.newPassword; 
confirmPassword = document.frmChange.confirmPassword; 

if(!currentPassword.value) { 
currentPassword.focus(); 
document.getElementById("currentPassword").innerHTML = "required"; 
output = false; 
} 
else if(!newPassword.value) { 
newPassword.focus(); 
document.getElementById("newPassword").innerHTML = "required"; 
output = false; 
} 
else if(!confirmPassword.value) { 
confirmPassword.focus(); 
document.getElementById("confirmPassword").innerHTML = "required"; 
output = false; 
} 
if(newPassword.value != confirmPassword.value) { 
newPassword.value=""; 
confirmPassword.value=""; 
newPassword.focus(); 
document.getElementById("confirmPassword").innerHTML = "not same"; 
output = false; 
} 
return output; 
} 
</script> 

回答

0

這是你在做什麼:

  1. 以用戶輸入
  2. 入門散列密碼從數據庫
  3. 哈希密碼的用戶輸入
  4. 哈希用戶輸入
  5. 插入用戶輸入到數據庫中

你需要你做比較之前,哈希密碼比較。即

  1. 以用戶輸入
  2. 快速從數據庫
  3. 哈希密碼哈希用戶輸入
  4. 哈希密碼從數據庫進行比較,以從用戶輸入
  5. 插入用戶輸入到哈希密碼數據庫

這就是說,你正在使用an unsuitable hashing algorithm並需要take better care您的用戶密碼。

0

使用md5散列密碼是不安全的。使用散列(..)函數,而不是sha256或sha512。使用鹽也是一個好主意。

php-script: 在如果你應該散列currentpassword了。假設db中的密碼也是散列的。

+0

這看起來像共同映射到我的代碼?不知道如何一起做到這一點 – Anthony 2014-09-30 08:13:15