【问题标题】:Change Password using md5 in PHP and Jquery在 PHP 和 Jquery 中使用 md5 更改密码
【发布时间】:2019-03-25 05:57:59
【问题描述】:

当我尝试更新/更改密码时,它说我当前的密码错误

我使用 md5 加密密码,但我不知道如何使用 jQuery 和 Ajax 更新加密密码。

这是我正在使用的 jQuery 代码:

jQuery("#change_password").submit(function (e) {
            e.preventDefault();

            var password = jQuery('#password').val();
            var current_password = jQuery('#current_password').val();
            var new_password = jQuery('#new_password').val();
            var retype_password = jQuery('#retype_password').val();
            if (password != current_password) {
                $.jGrowl("Password does not match with your current password  ", {
                    header: 'Change Password Failed'
                });
            } else if (new_password != retype_password) {
                $.jGrowl("Password does not match with your new password  ", {
                    header: 'Change Password Failed'
                });
            } else if ((password == current_password) && (new_password == retype_password)) {
                var formData = jQuery(this).serialize();
                $.ajax({
                    type: "POST",
                    url: "update_password_mahasiswa.php",
                    data: formData,
                    success: function (html) {

                        $.jGrowl("Your password is successfully change", {
                            header: 'Change Password Success'
                        });
                        var delay = 2000;
                        setTimeout(function () {
                            window.location = 'dashboard_mahasiswa.php'
                        }, delay);
                    }
                });

更新密码的php代码:

<?php
  include('dbcon.php');
  include('session.php');
  $new_password  = $_POST['new_password'];
  $new_password  = md5($new_password)
  mysql_query("update mahasiswa set password = '$new_password' where mahasiswa_id = '$session_id'")or die(mysql_error());
?>

【问题讨论】:

  • 不要使用md5() 进行密码散列。 这是非常不安全的。请改用 PHP 的 password_hash()password_verify()。如果您运行的 PHP 版本低于 5.5(我真的希望您不是),您可以使用 password_compat library 来获得相同的功能。
  • 您应该将密码发布到后端,由您处理所有密码验证和散列。
  • 不要使用mysql_-函数。它们已被弃用多年,并在 php7 中被删除。使用 mysql 或 pdo,并使用参数化语句 - 现在,您的代码很容易受到 SQL 注入攻击! 这意味着您的服务迟早会 泄露敏感数据对黑客。

标签: php jquery md5


【解决方案1】:

在对密码进行哈希处理时尝试使用以下函数:

password_hash()
password_verify()
password_needs_rehash()
password_get_info()

如果您想以标准方式进行操作,这些非常方便。 Here 是一篇关于它的文章。

根据您的新密码的更新,它与任何标准更新查询相同。

UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value

Here 是更多信息。

【讨论】:

  • 使用password_* 函数当然意味着必须使用这些函数存储所有 密码,并且验证的发生方式与检查md5() 哈希值略有不同。所以 OP 应该放弃 md5()“加密”,但必须更改他的注册和登录模块以及使用 password_* 函数。
【解决方案2】:

我建议您将mysqli_query() 与准备好的语句一起使用。为避免 SQL 注入,您必须使用准备好的语句。

$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

/* Prepared statement, stage 1: prepare */
$stmt = $mysqli->prepare("update mahasiswa set password = ? where mahasiswa_id = ?");
$new_password = password_hash($_POST['new_password']);
$stmt->bind_param("si", $new_password, $session_id);
$stmt->execute();
if($stmt->affected_rows === 0) exit('No rows updated');
$stmt->close();

一个使用mysqli_query() 代替mysql_query() 的简单示例。

 //$con must contain your database connection
 //eg:  $con = mysqli_connect("localhost","my_user","my_password","my_db");
 $new_password = password_hash($_POST['new_password']);
 $my_query = 'update mahasiswa set password = '.$new_password.' where mahasiswa_id = '.$session_id;
 if(mysqli_query($con,$my_query)){
     //database updated succesfully
 } else {
     //failure
 }

如果您使用的是mysql_query(),那么

 // if your db connection is valid then
 if(mysql_query($my_query)){
     //database updated succesfully
 } else {
     //failure
 }

【讨论】:

  • 在没有准备好的语句的情况下使用mysqli_并不比使用mysql_好多少。如果切换 API(应该使用哪个,只需使用准备好的语句),您还必须更新连接。此外,已经存储的密码需要更新,如果您要切换到password_*(您应该这样做!),也必须更新登录/注册模块。这不一定是一个简单的替换。
  • 我目前正在使用 mysqli,我只想首先使用 md5 作为启动器,但即使这样我也无法使用 jQuery 更改密码
  • 确保这些变量(password、current_password、new_password、retype_password)包含准确的值。不要使用 md5,因为它会在以后破坏您的系统。制作一个安全系统。
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2014-06-25
  • 2012-02-12
  • 2013-06-17
相关资源
最近更新 更多