【问题标题】:How to change the password in PHP?如何在 PHP 中更改密码?
【发布时间】:2019-03-10 08:44:19
【问题描述】:

这是我的模型:

public function editNewPassword($data){
    // $user_name = $data['user_name'];
    $user_id = $data['id'];
    $user_oldpass = $data['password'];
    $user_newpass = $data['newpass'];


    $sql = "UPDATE user SET password = '".md5($user_newpass)."' WHERE password = 'md5($user_oldpass)' ";
        $query = $this->db->prepare($sql);
        $query->execute();
}


public function getUser(){
    return $this->db->select("SELECT * FROM 'users'");
}

这是我的控制器:

function changePassword(){
        if(isset ($_POST['edit_password'])){
            $user_oldpass = ($_POST['user_oldpass']);
            $user_id = ($_POST['user_id']);
            $user_name = ($_POST['user_name']);
            $user_newpass = ($_POST['user_newpass']);

            $this->model->editNewPassword($data);
    }       
}

这是我的 VIEW 代码:

<form role="form">
<!-- <input typ e="text" name="username" id="username" placeholder="Enter Your Username"><br> -->
<input type="text" name="old_password" id="old_password" placeholder="Enter Your Old Password"><br>
<input type="text" name="new_password" id="new_password" placeholder="Enter Your New Password"><br>
<input type="text" name="con_newpassword" id="con_newmpassword" placeholder="Enter Confirm Password"><br>
<span id='message'></span>
<input type="hidden" id="edit_password_id">
<button id="edit_password" style="background-color:#008000">Submit</button>

这是我的 javascript 代码:

$('#edit_password').on('click', function(){
// alert('Password changed successfully!')
var 
user_id = $('#edit_password_id').val();
user_name = $('#username').val();
user_oldpass = $('#oldpassword').val();
user_newpass = $('#newpassword').val();


$.ajax({
url: URL+'changepassword/changePassword',
type: "post",
data: {
    id : id,
    name : name,
    password : password, 
    newpass : newpass
},
success: function(response){
    $('#edit_password_id').modal('toggle');
    location.reload();
},
error: function(jqXHR, textStatus, errorThrown) {
    console.log(textStatus, errorThrown);
}
});
});

我的问题是我的密码即使没有错误也不会更改,而且我不知道我的代码错误在哪里。我是新手。

【问题讨论】:

  • 这仅仅是一个爱好项目和/或学校项目吗?如果是这样,我建议从头开始,因为使用 MD5 进行密码散列、无盐和更新任何匹配的人都是 Web 应用程序安全性的基本问题。而且我怀疑您对 SQL 注入持开放态度(即使 此代码中 中没有任何内容。
  • 您的 where 子句看起来不对。插入一个 echo $sql;你会看到的。
  • 同意@kuh-chan。在语句的第二部分,$user_oldpass 变量将被扩展,但md5() 部分也将包括在内。该查询将查找类似 @​​987654328@(而不是 md5 哈希)的内容,并且与您要查找的记录不匹配。

标签: javascript php jquery


【解决方案1】:

这里的代码是直接的问题:

$sql = "UPDATE user SET password = '" .
    md5($user_newpass) .
    "' WHERE password = 'md5($user_oldpass)' ";

对于“password”的密码,数据库会看到:

 UPDATE user SET password = '5f4dcc3b5aa765d61d8327deb882cf99'
 WHERE password = 'md5(password)'

我相信您希望这里的md5() 被视为一个数据库函数,但由于它是在引号中的,所以它只会被视为一个普通的字符串。由于您的用户没有md5(password) 的密码,因此查询运行并且没有任何行受到影响。

相关建议

  • 不要使用 MD5 作为密码的散列算法
  • 始终使用盐
  • 除非您知道自己在做什么,否则请使用内置的哈希和加盐函数
  • 密码更新应该过滤用户和密码,而不仅仅是用户
  • 使用参数绑定避免 SQL 注入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2017-08-18
    相关资源
    最近更新 更多