将显示密码的解决方案转变为安全的解决方案


turn a solution that reveals password to a secure solution

我想进行密码检查,其中javascript变量是用户编写的密码。我想检查它是否正确,我通过比较用户在存储实际值的php变量中所写的内容来做到这一点。

这不是一个安全的解决方案。我如何更改它。我希望if语句与以前位于同一位置?

她是我的代码:

            var password=$("#password").val();
            if(password!='<?php echo "$password"; ?>'){
            alert("No changes has been made due to wrong password.");
            }
            else{
                $.ajax({
                    type: "POST",
                    url: "modify_profile.php",
                  data: {"firstname":firstname,"lastname":lastname},
                    success: function( data){     
                    }
                }); 
            }
            });

这里是modify_profile.php。

<?php
    require("../db/connect.php");
    $email='test@gmail.com';
    $written_password=( $_POST['firstname']);


    if( isset($_POST['firstname'])) 
{
    $firstname=( $_POST['firstname']);
    $query=mysqli_query($dbcon, "UPDATE user SET first_name='$firstname' WHERE email='$email'");
     $result = mysqli_query($dbcon,$query);
}
    if( isset($_POST['lastname'])) {
    $lastname=( $_POST['lastname']); 
    $query=mysqli_query($dbcon, "UPDATE user SET last_name='$lastname' WHERE email='$email'");
    $result = mysqli_query($dbcon,$query);

}

require("../db/close.php")
?>

您不能有那种风格的if语句并且是安全的。安全性要求您不存储密码。

为了安全,您必须:

  1. 仅以带salt的哈希形式存储密码
  2. 通过SSL将提交的密码发送到服务器
  3. (在服务器上)用相同的salt对提交的密码进行散列,并将其与存储的散列密码进行比较

即使不是这样,要求浏览器(由用户控制)检查密码是否正确也是不安全的,因为用户可以查看JavaScript并直接在else语句中发出HTTP请求。

你需要做一些类似的事情:

$.ajax({
  type: "POST",
  url: "modify_profile.php",
  data: {"firstname":firstname,"lastname":lastname, password: password},
   success: function( data){ }
})