Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Mengesahkan Kata Laluan Masin dengan Selamat dalam Sistem Log Masuk Pangkalan Data?

Bagaimanakah Saya Mengesahkan Kata Laluan Masin dengan Selamat dalam Sistem Log Masuk Pangkalan Data?

Barbara Streisand
Lepaskan: 2024-12-17 08:45:25
asal
647 orang telah melayarinya

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

Mengesahkan Kata Laluan Masin dalam Log Masuk Pangkalan Data

Apabila membangunkan tapak keahlian, memastikan kelayakan log masuk adalah penting. Satu aspek penting ialah melaksanakan kata laluan masin, yang meningkatkan perlindungan kata laluan dengan menambahkan rentetan rawak pada kata laluan sebelum mencincangnya.

Masalah:

Dalam kod yang disediakan, ralat dalam halaman log masuk membolehkan mana-mana ahli mengakses tapak walaupun kata laluan salah. Ini menunjukkan isu dengan semakan kesahihan kata laluan.

Jawapan:

Untuk mengesahkan kata laluan masin, kami tidak boleh membandingkan terus kata laluan yang dimasukkan dengan cincang yang disimpan. Sebaliknya, kita mesti:

  • Ambil cincang kata laluan daripada pangkalan data menggunakan carian mengikut nama pengguna.
  • Gunakan fungsi password_verify() untuk membandingkan kata laluan yang dimasukkan dengan cincang yang diambil. Fungsi ini mengekstrak faktor garam dan kos daripada cincang untuk perbandingan.

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

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

Dengan mengikuti proses ini, anda boleh mengesahkan dengan berkesan kata laluan masin dalam halaman log masuk anda, memastikan keselamatan tapak ahli anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Mengesahkan Kata Laluan Masin dengan Selamat dalam Sistem Log Masuk Pangkalan Data?. 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