Menambahkan Salt pada Otorisasi
Sekarang kita perlu mengubah otorisasi. Di sini perubahan akan lebih signifikan.
Tidak mungkin lagi memeriksa kebenaran pasangan login-password secara langsung, dengan satu permintaan. Mengapa: karena, untuk memeriksa password, perlu mendapatkan hash salted-nya, dan salt disimpan dalam database dan unik untuk setiap login.
Harus pertama-tama mendapatkan catatan hanya berdasarkan login, membaca salt, menambahkan salt pada password yang dimasukkan dan membandingkannya dengan password salted dari database dan hanya, jika cocok, - mengotorisasi pengguna.
Perhatikan, mungkin terjadi bahwa login dimasukkan salah, dalam hal ini pemeriksaan password tidak perlu dilakukan, dan langsung menampilkan bahwa otorisasi tidak mungkin - data tidak benar:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// ada pengguna dengan login seperti itu, sekarang perlu memeriksa password...
} else {
// tidak ada pengguna dengan login seperti itu, tampilkan pesan
}
?>
Mari kita tambahkan pemeriksaan password:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$salt = $user['salt']; // salt dari DB
$hash = $user['password']; // password salted dari DB
$password = md5($salt . $_POST['password']); // password salted dari user
// Bandingkan hash salted
if ($password == $hash) {
// semua ok, mengotorisasi...
} else {
// password tidak cocok, tampilkan pesan
}
} else {
// tidak ada pengguna dengan login seperti itu, tampilkan pesan
}
?>
Untuk keamanan, pengguna biasanya tidak diberi tahu, apa yang tidak cocok - login atau password, untuk mempersulit pencocokan pasangan login-password oleh peretas. Cukup menampilkan pesan bahwa pasangan login-password salah atau sesuatu seperti itu.
Implementasikan otorisasi dengan password salted seperti di atas. Coba daftar, login, pastikan semuanya bekerja.