跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

Password Verification: การใช้งาน password_verify()

บทความนี้อธิบายวิธีการใช้ฟังก์ชัน `password_verify()` ใน PHP เพื่อเปรียบเทียบรหัสผ่านที่ผู้ใช้ป้อนกับ hash ที่เก็บไว้ในฐานข้อมูล เพื่อยืนยันตัวตนอย่างปลอดภัย แล...

Password Verification: การใช้งาน password_verify()

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการใช้ฟังก์ชัน password_hash() เพื่อสร้าง hash ของรหัสผ่านและเก็บไว้ในฐานข้อมูลอย่างปลอดภัย ในบทนี้ เราจะมาเรียนรู้วิธีการตรวจสอบว่ารหัสผ่านที่ผู้ใช้ป้อนเข้ามานั้นถูกต้องหรือไม่ โดยการเปรียบเทียบกับ hash ที่เราเก็บไว้ในฐานข้อมูล ซึ่งเราจะใช้ฟังก์ชัน password_verify() ในการดำเนินการนี้

การเปรียบเทียบ Hash ด้วย password_verify()

ฟังก์ชัน password_verify() เป็นฟังก์ชันที่ใช้ในการเปรียบเทียบรหัสผ่านที่ผู้ใช้ป้อนเข้ามากับ hash ที่ถูกสร้างขึ้นโดย password_hash() ฟังก์ชันนี้จะคืนค่า true หากรหัสผ่านตรงกัน และ false หากไม่ตรงกัน

รูปแบบการใช้งานของ password_verify() คือ:

bool password_verify ( string $password , string $hash )
  • $password: รหัสผ่านที่ผู้ใช้ป้อนเข้ามา (plaintext password)
  • $hash: hash ของรหัสผ่านที่เก็บไว้ในฐานข้อมูล

ตัวอย่าง: สมมติว่าเรามี hash ของรหัสผ่านเก็บไว้ในตัวแปร $hashedPassword และผู้ใช้ป้อนรหัสผ่านเข้ามาในตัวแปร $userInputPassword เราสามารถตรวจสอบว่ารหัสผ่านถูกต้องหรือไม่ได้ดังนี้:

<?php

$hashedPassword = '$2y$10$somesaltyandrandomstring.UQDmGjU.aFv4kH9jX0f4.8/w4k3.t7'; // Hash ที่เก็บไว้ในฐานข้อมูล
$userInputPassword = 'password123'; // รหัสผ่านที่ผู้ใช้ป้อนเข้ามา

if (password_verify($userInputPassword, $hashedPassword)) {
    echo 'รหัสผ่านถูกต้อง!';
} else {
    echo 'รหัสผ่านไม่ถูกต้อง!';
}

?>

คำอธิบาย:

  • เรากำหนดตัวแปร $hashedPassword ให้เก็บ hash ของรหัสผ่านที่ได้จากการใช้ password_hash() ในบทที่แล้ว
  • เรากำหนดตัวแปร $userInputPassword ให้เก็บรหัสผ่านที่ผู้ใช้ป้อนเข้ามา
  • เราใช้ฟังก์ชัน password_verify() เพื่อเปรียบเทียบรหัสผ่านที่ผู้ใช้ป้อนเข้ามากับ hash ที่เราเก็บไว้
  • หาก password_verify() คืนค่า true แสดงว่ารหัสผ่านถูกต้อง เราจะแสดงข้อความ "รหัสผ่านถูกต้อง!"
  • หาก password_verify() คืนค่า false แสดงว่ารหัสผ่านไม่ถูกต้อง เราจะแสดงข้อความ "รหัสผ่านไม่ถูกต้อง!"

การจัดการเมื่อรหัสผ่านถูกต้อง

เมื่อรหัสผ่านที่ผู้ใช้ป้อนเข้ามาถูกต้อง เราจะต้องดำเนินการบางอย่าง เช่น:

  • สร้าง session ให้กับผู้ใช้ เพื่อให้ผู้ใช้สามารถเข้าถึงส่วนต่างๆ ของเว็บไซต์ที่ต้องมีการยืนยันตัวตนได้
  • บันทึกข้อมูลการเข้าสู่ระบบ (log in) ของผู้ใช้
  • redirect ผู้ใช้ไปยังหน้า dashboard หรือหน้าอื่นๆ ที่เกี่ยวข้อง

ตัวอย่าง:

<?php

session_start(); // เริ่มต้น session

$hashedPassword = '$2y$10$somesaltyandrandomstring.UQDmGjU.aFv4kH9jX0f4.8/w4k3.t7';
$userInputPassword = 'password123';

if (password_verify($userInputPassword, $hashedPassword)) {
    // รหัสผ่านถูกต้อง
    $_SESSION['loggedin'] = true; // กำหนด session variable เพื่อระบุว่าผู้ใช้ได้เข้าสู่ระบบแล้ว
    $_SESSION['username'] = 'john.doe'; // กำหนด session variable เพื่อเก็บ username ของผู้ใช้ (ตัวอย่าง)

    // Redirect ไปยังหน้า dashboard
    header('Location: dashboard.php');
    exit; // อย่าลืม exit เพื่อหยุดการทำงานของ script
} else {
    // รหัสผ่านไม่ถูกต้อง
    echo 'รหัสผ่านไม่ถูกต้อง!';
}

?>

คำอธิบาย:

  • เราเริ่มต้น session ด้วยฟังก์ชัน session_start()
  • เมื่อ password_verify() คืนค่า true เราจะกำหนด session variable ชื่อ loggedin ให้มีค่าเป็น true เพื่อระบุว่าผู้ใช้ได้เข้าสู่ระบบแล้ว
  • เราอาจจะกำหนด session variable อื่นๆ เพื่อเก็บข้อมูลของผู้ใช้ เช่น username
  • เราใช้ฟังก์ชัน header() เพื่อ redirect ผู้ใช้ไปยังหน้า dashboard
  • เราใช้ฟังก์ชัน exit() เพื่อหยุดการทำงานของ script ป้องกันการ execute โค้ดที่ไม่ต้องการ

การจัดการเมื่อรหัสผ่านไม่ถูกต้อง

เมื่อรหัสผ่านที่ผู้ใช้ป้อนเข้ามาไม่ถูกต้อง เราจะต้องดำเนินการบางอย่าง เช่น:

  • แสดงข้อความแจ้งเตือนให้ผู้ใช้ทราบว่ารหัสผ่านไม่ถูกต้อง
  • ให้ผู้ใช้ลองป้อนรหัสผ่านใหม่อีกครั้ง
  • อาจจะจำกัดจำนวนครั้งที่ผู้ใช้สามารถป้อนรหัสผ่านผิดได้ เพื่อป้องกัน brute-force attack

ตัวอย่าง:

<?php

$hashedPassword = '$2y$10$somesaltyandrandomstring.UQDmGjU.aFv4kH9jX0f4.8/w4k3.t7';
$userInputPassword = 'wrongpassword';

if (password_verify($userInputPassword, $hashedPassword)) {
    // รหัสผ่านถูกต้อง (ไม่ควรเกิดขึ้นในกรณีนี้)
    header('Location: dashboard.php');
    exit;
} else {
    // รหัสผ่านไม่ถูกต้อง
    echo '<p style="color: red;">รหัสผ่านไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง</p>';
    // อาจจะเพิ่ม logic ในการจำกัดจำนวนครั้งที่ผู้ใช้สามารถป้อนรหัสผ่านผิดได้
}

?>

คำอธิบาย:

  • เมื่อ password_verify() คืนค่า false เราจะแสดงข้อความแจ้งเตือนให้ผู้ใช้ทราบว่ารหัสผ่านไม่ถูกต้อง โดยใช้ HTML และ CSS เล็กน้อยเพื่อทำให้ข้อความเด่นชัดขึ้น
  • ในกรณีใช้งานจริง เราอาจจะเพิ่ม logic ในการจำกัดจำนวนครั้งที่ผู้ใช้สามารถป้อนรหัสผ่านผิดได้ เพื่อป้องกัน brute-force attack (จะกล่าวถึงในบทต่อๆ ไป)

ข้อควรระวังและข้อผิดพลาดที่พบบ่อย

  • อย่าลืมใช้ session_start() ก่อนที่จะใช้ session variables: หากคุณลืม session_start() โค้ดของคุณจะไม่สามารถใช้งาน session ได้
  • ตรวจสอบให้แน่ใจว่าคุณใช้ hash ที่ถูกต้อง: ตรวจสอบให้แน่ใจว่าคุณกำลังเปรียบเทียบรหัสผ่านกับ hash ที่ถูกต้องจากฐานข้อมูล
  • ระวังเรื่อง case-sensitivity: รหัสผ่านมักจะเป็น case-sensitive ดังนั้นตรวจสอบให้แน่ใจว่าคุณกำลังเปรียบเทียบรหัสผ่านด้วย case ที่ถูกต้อง
  • จัดการ Error อย่างเหมาะสม: หากมีข้อผิดพลาดเกิดขึ้นในระหว่างการตรวจสอบรหัสผ่าน ให้จัดการ error อย่างเหมาะสม เพื่อป้องกันไม่ให้ข้อมูลรั่วไหล
  • อย่าแสดงข้อความ error ที่ละเอียดเกินไป: หลีกเลี่ยงการแสดงข้อความ error ที่บอกว่า "username นี้ไม่มีอยู่ในระบบ" หรือ "รหัสผ่านไม่ถูกต้อง" เพราะอาจจะช่วยให้ผู้ไม่หวังดีสามารถเจาะระบบได้ง่ายขึ้น

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการใช้ฟังก์ชัน password_verify() เพื่อตรวจสอบรหัสผ่านที่ผู้ใช้ป้อนเข้ามากับ hash ที่เราเก็บไว้ในฐานข้อมูลอย่างปลอดภัย การใช้ฟังก์ชันนี้เป็นส่วนสำคัญในการรักษาความปลอดภัยของระบบของคุณ และป้องกันไม่ให้ผู้ไม่หวังดีสามารถเข้าถึงบัญชีของผู้ใช้ได้ ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับการจัดการ session เพื่อให้ผู้ใช้ที่ผ่านการยืนยันตัวตนแล้วสามารถเข้าถึงส่วนต่างๆ ของเว็บไซต์ที่ต้องมีการยืนยันตัวตนได้

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务