当前密码必须输入哈希?

时间:2014-09-30 06:13:33

标签: javascript php mysqli

在我的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>   

2 个答案:

答案 0 :(得分:0)

这就是你在做的事情:

  1. 接受用户输入
  2. 从数据库获取哈希密码
  3. 将散列密码与用户输入进行比较
  4. 哈希用户输入
  5. 将用户输入插入数据库
  6. 在进行比较之前,您需要对密码进行哈希处理。即。

    1. 接受用户输入
    2. 从数据库获取哈希密码
    3. 哈希用户输入
    4. 将数据库中的散列密码与用户输入的散列密码进行比较
    5. 将用户输入插入数据库
    6. 也就是说,您正在使用an unsuitable hashing algorithm并需要take better care个用户密码。

答案 1 :(得分:0)

使用md5散列密码不安全。使用hash(..)函数代替sha256或sha512。使用盐也是一个好主意。

的PHP脚本: 在if中你应该散列当前密码。假设db中的密码也是哈希值。