首頁 > 後端開發 > php教程 > 為什麼即使使用加鹽密碼,我的會員網站也會繞過密碼檢查?

為什麼即使使用加鹽密碼,我的會員網站也會繞過密碼檢查?

Patricia Arquette
發布: 2024-11-18 21:47:02
原創
759 人瀏覽過

Why Does My Member Site Bypass Password Checks Even When Salted Passwords Are Used?

如何在資料庫驗證中區分加鹽密碼和純密碼

在資料庫驗證中,保護密碼至關重要。一種流行的技術涉及使用加鹽密碼,其中在散列之前將隨機字串(鹽)附加到密碼中。這使得破解密碼的難度呈指數級增長,從而增強了安全性。

挑戰:驗證會員登入

在使用儲存在MySQL 中的加鹽密碼實現會員網站時,常見的一個問題是:登入認證過程中出現錯誤。登入嘗試似乎錯誤地繞過了密碼檢查,從而允許未經授權的訪問該網站。

檢查問題代碼

以下程式碼片段用於驗證會員登入:

$name = mysqli_real_escape_string($connect, $_POST['name']);
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false){
    die(mysqli_error());
}
$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
$saltedPW = $password . $salt;
$hashedPW = hash('sha256', $saltedPW);
$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";

if (mysqli_query($connect, $sqlQuery)){
    echo '<h1>Welcome to the member site '.$name.'</h1>';
} else {
    echo 'error adding the query: '.$sql_q.'<br> Reason: '.mysqli_error($connect);
}
登入後複製

解決方案:正確的密碼驗證

問題是由於在SQL 查詢中使用直接密碼比較而引起的。由於儲存的密碼經過加鹽處理,因此此方法會將所有登入嘗試誤解為有效。為了修正這個問題,我們需要執行以下步驟:

  1. 從資料庫中擷取加鹽雜湊:執行查詢以取得對應的密碼雜湊(包括鹽)到提供的用戶名。
  2. 將輸入的密碼與加鹽雜湊進行比較:使用password_verify()函數,它會自動從雜湊中提取鹽和成本因子,以評估密碼的真實性根據儲存的雜湊輸入的密碼。

使用 mysqli 的範例程式碼:

// Connect to the database
$mysqli = new mysqli($servername, $username, $password, $dbname);

// Initialize variables
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);

// Fetch the salted hash for the specified username
$query = "SELECT password FROM users WHERE username = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($hashedPassword);
$stmt->fetch();

// Verify the entered password
if (password_verify($password, $hashedPassword)) {
    // Login successful
    echo '<h1>Welcome to the member site '.$username.'</h1>';
} else {
    // Password did not match
    echo 'Invalid login credentials';
}
登入後複製

以上是為什麼即使使用加鹽密碼,我的會員網站也會繞過密碼檢查?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板