Menambah Garam kepada Pengesahan

Sekarang kita perlu mengubah pengesahan. Perubahan di sini akan lebih ketara.

Sudah tidak mungkin untuk menyemak ketepatan pasangan log kata laluan serta-merta dengan satu pertanyaan sahaja. Mengapa: kerana, untuk menyemak kata laluan, perlu mendapatkan hash masinnya, dan garam disimpan dalam pangkalan data dan unik untuk setiap log masuk.

Perlu untuk mula-mula mendapatkan rekod hanya mengikut log masuk, baca garam, masinkan kata laluan yang dimasukkan dan bandingkan dengan kata laluan masin dari pangkalan dan hanya, jika ia sepadan, - sahkan pengguna.

Perlu diingat, mungkin berlaku log masuk dimasukkan dengan salah, dalam kes ini semakan kata laluan tidak perlu dilakukan, serta-merta keluarkan, bahawa pengesahan tidak mungkin - data tidak betul:

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)) {
    // pengguna dengan log masuk ini wujud, sekarang perlu menyemak kata laluan...
  } else {
    // pengguna dengan log masuk ini tiada, keluarkan mesej
  }
?>

Mari tambah semakan kata laluan:

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']; // garam dari Pangkalan Data
    $hash = $user['password']; // kata laluan masin dari Pangkalan Data
    
    $password = md5($salt . $_POST['password']); // kata laluan masin dari pengguna
    
    // Bandingkan hash masin
    if ($password == $hash) {
      // semua ok, sahkan...
    } else {
      // kata laluan tidak sesuai, keluarkan mesej
    }
  } else {
    // pengguna dengan log masuk ini tiada, keluarkan mesej
  }
?>

Atas sebab keselamatan, pengguna biasanya tidak dimaklumkan apa yang tidak sesuai - log masuk atau kata laluan, untuk menyukarkan percubaan pasangan log masuk-kata laluan oleh penggodam. Hanya keluarkan mesej tentang, bahawa pasangan log masuk-kata laluan tidak betul atau sesuatu seperti itu.

Задание 1

Laksanakan pengesahan dengan kata laluan masin seperti yang diterangkan di atas. Cuba daftar, sahkan diri, pastikan semuanya berfungsi.