แล็บ Broken Access Control สำหรับ IT KMITL Open House 2026
Broken Access Control คือช่องโหว่ที่เกิดจากเซิร์ฟเวอร์ตรวจสิทธิ์การเข้าถึงผิดพลาด
ใช้คู่มือนี้เมื่อเว็บคู่มือกลางเปิดไม่ได้

จรรยาบรรณ
ทดลองได้เฉพาะเว็บจำลองนี้และ localhost บนเครื่องของตัวเอง
ห้ามนำวิธีนี้ไปใช้กับเว็บจริง เพราะการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาตมีความผิดตามกฎหมาย

บัญชีทดลอง (รหัสผ่านทุกบัญชีคือ 1234)
  น้องเอ      nong-a      /profile/101
  น้องบี      nong-b      /profile/102
  ครูแอดมิน   kru-admin   /profile/1     (admin)

ขั้นที่ 1  เปิดเทอร์มินัลในโฟลเดอร์ portal แล้วรันคำสั่ง
          npm start
          จากนั้นเปิด http://localhost:3000 ในเบราว์เซอร์

ขั้นที่ 2  ล็อกอินด้วย nong-a และรหัสผ่าน 1234
          เมื่ออยู่ที่ /profile/101 ให้เปลี่ยนเลขท้ายในช่อง URL ด้านบนของเบราว์เซอร์เป็น /profile/102
          กด Enter ถ้าเห็นเกรดของน้องบี แสดงว่าเซิร์ฟเวอร์ไม่ได้ตรวจสิทธิ์
          ช่องโหว่นี้เรียกว่า Broken Access Control แบบ IDOR (Insecure Direct Object Reference) คือระบบเชื่อ id ใน URL โดยไม่ตรวจสิทธิ์ก่อน

ขั้นที่ 3  เปิดไฟล์ access-control.js
          ในฟังก์ชัน canViewProfile ให้เปลี่ยน return true; เป็น

          return String(currentUser.id) === String(requestedId) || currentUser.role === "admin";

          บันทึกไฟล์ กด Ctrl+C ในเทอร์มินัล แล้วรัน npm start อีกครั้ง

ขั้นที่ 4  ล็อกอินเป็นน้องเอ แล้วเปิด /profile/102
          เว็บต้องแสดงหน้า 403 เพื่อยืนยันว่าเซิร์ฟเวอร์ปฏิเสธคำขอแล้ว
          จากนั้นล็อกอินด้วย kru-admin แล้วเปิด /profile/102 ครูต้องยังดูได้

โบนัส     ล็อกอินเป็นน้องเอ แล้วเปิด /admin/students
          ถ้าเข้าได้ ให้แก้ canViewAdminPage เป็น
          return currentUser.role === "admin";
          บันทึกไฟล์และรีสตาร์ทเซิร์ฟเวอร์อีกครั้ง
