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

时间:2013-08-31 13:06:47

标签: php javascript ajax

我想要检查密码,检查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")
?>

1 个答案:

答案 0 :(得分:4)

您不能拥有该样式的if语句并且是安全的。安全性要求您不要存储密码。

为了安全起见,您必须:

  1. 仅将密码存储在hashed form带盐
  2. 通过SSL将提交的密码发送到您的服务器
  3. (在服务器上)使用相同的salt对提交的密码进行哈希处理,并将其与存储的哈希密码进行比较
  4. 即使不是这种情况,要求浏览器(由用户控制)检查密码是否正确将是不安全的,因为用户可以查看JavaScript并在else直接声明。

    您需要执行以下操作:

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