0

我想进行密码检查,其中 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")
?>
4

1 回答 1

4

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

为了安全起见,您必须:

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

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

您需要执行以下操作:

$.ajax({
  type: "POST",
  url: "modify_profile.php",
  data: {"firstname":firstname,"lastname":lastname, password: password},
   success: function( data){ }
})
于 2013-08-31T13:10:10.353 回答