Mengapa Tapak Ahli Saya Memintas Semakan Kata Laluan Walaupun Kata Laluan Masin Digunakan?

Patricia Arquette
Lepaskan: 2024-11-18 21:47:02
asal
678 orang telah melayarinya

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

Cara Membezakan Antara Kata Laluan Masin dan Biasa dalam Pengesahan Pangkalan Data

Dalam pengesahan pangkalan data, menjaga kata laluan adalah penting. Satu teknik lazim melibatkan penggunaan kata laluan masin, di mana rentetan rawak (garam) dilampirkan pada kata laluan sebelum pencincangan. Ini meningkatkan keselamatan dengan menjadikannya lebih sukar untuk memecahkan kata laluan secara eksponen.

Cabaran: Mengesahkan Log Masuk Ahli

Apabila melaksanakan tapak ahli dengan kata laluan masin yang disimpan dalam MySQL, perkara biasa ralat berlaku semasa proses pengesahan log masuk. Percubaan log masuk nampaknya memintas semakan kata laluan secara salah, membenarkan akses tanpa kebenaran ke tapak.

Memeriksa Kod Masalah

Coretan kod berikut digunakan untuk mengesahkan log masuk ahli:

$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);
}
Salin selepas log masuk

Penyelesaian: Kata Laluan yang Betul Pengesahan

Isu timbul daripada menggunakan perbandingan kata laluan langsung dalam pertanyaan SQL. Memandangkan kata laluan yang disimpan telah diasinkan, kaedah ini menyalahtafsir semua percubaan log masuk sebagai sah. Untuk membetulkan ini, kami perlu melaksanakan langkah berikut:

  1. Dapatkan kembali Cincang Masin daripada Pangkalan Data: Jalankan pertanyaan untuk mengambil cincang kata laluan (yang termasuk garam) yang sepadan kepada nama pengguna yang disediakan.
  2. Bandingkan Kata Laluan yang Dimasukkan dengan Cincang Masin: Gunakan fungsi password_verify(), yang secara automatik mengekstrak faktor garam dan kos daripada cincang, untuk menilai ketulenan kata laluan yang dimasukkan berbanding cincang yang disimpan.

Contoh Kod Menggunakan 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';
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Tapak Ahli Saya Memintas Semakan Kata Laluan Walaupun Kata Laluan Masin Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan