การเพิ่มเกลือในระบบการยืนยันตัวตน

ตอนนี้เราจำเป็นต้องเปลี่ยนระบบการยืนยันตัวตน การเปลี่ยนแปลงในส่วนนี้จะค่อนข้างสำคัญมากขึ้น

เราไม่สามารถตรวจสอบความถูกต้องของคู่ ล็อกอิน-รหัสผ่านได้ทันทีด้วยคำสั่งเดียวอีกต่อไป ทำไม: เพราะการที่จะตรวจสอบรหัสผ่านได้ เราต้อง ได้แฮชที่ผสมเกลือของมันมา และเกลือนั้นเก็บไว้ ในฐานข้อมูลและมีลักษณะเฉพาะสำหรับแต่ละล็อกอิน

เราจะต้องดึงข้อมูลผู้ใช้ตาม ล็อกอินก่อน อ่านค่าเกลือ นำเกลือมาผสมกับรหัสผ่านที่ป้อนเข้ามา แล้วเปรียบเทียบกับรหัสผ่านที่ผสมเกลือจากฐานข้อมูล และ只有在ตรงกันเท่านั้น จึงจะยืนยันตัวตน ผู้ใช้ได้

โปรดทราบว่า อาจมีกรณีที่ล็อกอินถูกป้อน มาไม่ถูกต้อง ในกรณีนี้ก็ไม่จำเป็นต้อง ตรวจสอบรหัสผ่าน แต่ให้แสดงผลทันทีว่า การยืนยันตัวตนไม่สำเร็จ - ข้อมูลไม่ถูกต้อง:

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)) {
    // มีผู้ใช้ที่มีล็อกอินนี้ ตอนนี้ต้องตรวจสอบรหัสผ่าน...
  } else {
    // ไม่มีผู้ใช้ที่มีล็อกอินนี้ แสดงข้อความ
  }
?>

มาเพิ่มการตรวจสอบรหัสผ่านกัน:

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']; // เกลือจากฐานข้อมูล
    $hash = $user['password']; // รหัสผ่านที่ผสมเกลือจากฐานข้อมูล
    
    $password = md5($salt . $_POST['password']); // รหัสผ่านที่ผสมเกลือจากผู้ใช้
    
    // เปรียบเทียบแฮชที่ผสมเกลือ
    if ($password == $hash) {
      // เรียบร้อยทั้งหมด ยืนยันตัวตน...
    } else {
      // รหัสผ่านไม่ตรงกัน แสดงข้อความ
    }
  } else {
    // ไม่มีผู้ใช้ที่มีล็อกอินนี้ แสดงข้อความ
  }
?>

เพื่อความปลอดภัย โดยปกติจะไม่แจ้งให้ผู้ใช้ทราบ ว่าส่วนไหนที่ไม่ถูกต้อง - ล็อกอิน หรือรหัสผ่าน เพื่อทำให้แฮกเกอร์เดาคู่ล็อกอิน-รหัสผ่าน ได้ยากขึ้น เพียงแสดงข้อความว่า คู่ล็อกอิน-รหัสผ่านไม่ถูกต้องหรืออะไร ในทำนองนั้น

Задание 1

ให้ดำเนินการระบบยืนยันตัวตนด้วยรหัสผ่านที่ผสมเกลือ ตามที่อธิบายไว้ข้างต้น ลองลงทะเบียน, ลองยืนยันตัวตน, และตรวจสอบให้แน่ใจว่าทุกอย่างทำงานได้