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:

html<?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:

html<?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.

Задание 1

Implementasikan otorisasi dengan password salted seperti di atas. Coba daftar, login, pastikan semuanya bekerja.