首頁 >資料庫 >mysql教程 >如何安全地驗證資料庫登入系統中的加鹽密碼?

如何安全地驗證資料庫登入系統中的加鹽密碼?

Barbara Streisand
Barbara Streisand原創
2024-12-17 08:45:25651瀏覽

How Do I Securely Verify Salted Passwords in a Database Login System?

驗證資料庫登入中的加鹽密碼

開發會員網站時,保護登入憑證至關重要。一個重要的方面是實現加鹽密碼,它透過在散列密碼之前向密碼添加隨機字串來增強密碼保護。

問題:

在提供的程式碼中,儘管密碼輸入不正確,但登入頁面中的錯誤允許任何成員存取網站。這表示密碼有效性檢查有問題。

答案:

要驗證加鹽密碼,我們無法直接將輸入的密碼與儲存的雜湊進行比較。相反,我們必須:

  • 使用使用者名稱搜尋從資料庫中取得密碼雜湊。
  • 使用password_verify()函數將輸入的密碼與所取得的雜湊進行比較。此函數從雜湊中提取鹽和成本因子進行比較。

mysqli的範例程式碼:

$mysqli = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
$stmt->bind_result($hashFromDb);
if ($stmt->fetch() === true) {
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}

範例程式碼PDO:

$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$pdo = new PDO($dsn, $dbUser, $dbPassword);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, $_POST['username'], PDO::PARAM_STR);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
    $hashFromDb = $row['password'];
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}

透過遵循此流程,您可以有效驗證您的登入頁面中的加鹽密碼,確保您的會員網站的安全。

以上是如何安全地驗證資料庫登入系統中的加鹽密碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn