簡體   English   中英

使用密碼散列更新當前密碼

[英]Updating current passwords with password hashing

我正在嘗試對數據庫中的當前password值運行password_hash ...

$mysqli->query("UPDATE users SET password = '" . password_hash('password', PASSWORD_DEFAULT) . "');

我沒有收到任何錯誤,但密碼在更新后無法正常工作。 我唯一能想到的是上面的查詢沒有從表中獲取當前密碼值。

不需要准備好的聲明,因為我只是在本地為這個做准備。

你不能像這樣混合 PHP 和 SQL。 password_hash是一個 PHP function。你需要將用戶數據取到 PHP 中,迭代它並將每條記錄保存到數據庫中。 這樣做時使用 SQL 筆交易。

// Remember to always enable error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$mysqli->set_charset('utf8mb4'); // always set the charset

$users = $mysqli->query('SELECT Id, password FROM users');

// start transaction and prepare a statement
$mysqli->begin_transaction();
$stmt = $mysqli->prepare('UPDATE users SET `password`=? WHERE Id=?');

foreach ($users as $user) {
    // make a hash out of the password
    $hash = password_hash($user['password'], PASSWORD_DEFAULT);
    $stmt->bind_param('ss', $hash, $user['Id']);
    $stmt->execute();
}

// commit the data to DB and end transaction
$mysqli->commit();

始終使用准備好的語句。 絕對沒有理由不使用參數綁定。 如果您從一開始就使用參數綁定,您會更快地注意到您的方法存在缺陷。 現在您已將所有密碼更改為字符串password 每個帳戶都有相同的密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM