สมมติว่าลูกค้ากรอกชื่อและเบอร์โทรผ่านแล้ว โค้ดส่งต่อหน้าไปยังหน้าแสดงผลประกันภัย ต้องระวังอย่าให้ URL เป็นแบบนี้
❌ https://vir9.com/view.php?id=12 หรือ ?phone=0812345678
ให้เก็บสถานะการเข้าระบบไว้ใน $_SESSION ของ PHP เท่านั้น และดึงข้อมูลจากไฟล์ JSON มาแสดงเฉพาะส่วนของ Session นั้นๆ ห้ามส่งค่าอ้างอิงส่วนบุคคลผ่าน URL
วิธีแก้
พอเราเปลี่ยนระบบความปลอดภัยมาเป็นแบบใช้ $_SESSION ของ PHP เต็มรูปแบบ (ห้ามส่งค่าอ้างอิงผ่าน URL) ผลลัพธ์ก็คือ “หน้าลิงก์ทางเข้าของลูกค้าทุกคนจะเป็น URL ตัวเดียวกันเป๊ะๆ ทั่วประเทศ” เช่น
https://vir9.com/index.html (หรือหน้า index6.html ที่เปิดใช้งาน)
ลูกค้าทุกคนต้องกดเข้าลิงก์นี้เหมือนกันหมด แล้วไปพิมพ์กรอก “ชื่อจริง + เลขท้ายบัตร 4 หลัก” เอาเอง เพื่อสร้าง Session ฝั่งเซิร์ฟเวอร์ ระบบถึงจะยอมเปิดให้ดูหน้าประวัติสเต็ป 3 สีของคนๆ นั้น
แต่ถ้าถามว่า “แล้วเราจะหมดสิทธิ์ทำลิงก์ส่งให้ลูกค้ากดทีเดียวแล้วเด้งเข้าหน้าตัวเองแบบอัตโนมัติเลยใช่ไหม?” คำตอบคือ “ยังสามารถทำได้อยู่ครับพี่! แต่ต้องใช้เทคนิคพิเศษนิดหน่อย” เพื่อให้เกิดความสะดวกกับลูกค้า (ไม่ต้องมานั่งพิมพ์เองทุกครั้ง) แต่ในขณะเดียวกันก็ยังปลอดภัย 100% ตามกฎระเบียบ
แนวทางที่ 1: ใช้ “ระบบลิงก์ผ่านรหัสตั๋วชั่วคราว” (Secure Token Link) – แนะนำวิธีนี้
แทนที่เราจะส่งเบอร์โทรหรือส่งข้อมูลดิบไปบน URL ซึ่งอันตราย เราจะเปลี่ยนไปส่ง “รหัสตั๋วสุ่มชั่วคราว (Token)” ที่ระบบหลังบ้านสุ่มขึ้นมาให้ลูกค้าแต่ละคนแทนครับ
- หน้าตาลิงก์ที่จะส่งให้ลูกค้า:
https://vir9.com/index.html?ticket=abc123xyz - หลักการทำงาน:
- ในหน้าแอดมิน (
admin6.php) ตอนที่พี่คีย์เพิ่มข้อมูลลูกค้า พี่อาจจะให้ระบบสุ่มรหัสภาษาอังกฤษผสมตัวเลขขึ้นมาสัก 10 หลัก (เช่นabc123xyz) ผูกไว้กับตัวเลขท้ายบัตรประชาชนของหมอคนนั้นในdb.json - เวลาส่งลิงก์ให้หมอแต่ละท่าน ลิงก์จะมีรหัสตั๋ว (
ticket) ห้อยท้ายไม่ซ้ำกันเลย - พอหมอกดลิงก์นี้ปุ๊บ โค้ด JavaScript หน้าบ้านจะจับค่าตั๋วนี้ส่งไปให้
api.phpตรวจสอบ - ถ้า
api.phpเช็กในdb.jsonแล้วพบว่าตั๋วนี้ถูกต้องและตรงกับคุณหมอท่านนี้ ตัวapi.phpจะทำหน้าที่ “สร้าง $_SESSION ให้คุณหมอคนนั้นอัตโนมัติทันที” แล้วเคลียร์หน้าเว็บให้แสดงตาราง 3 สีเลย โดยที่คุณหมอ ไม่ต้องกรอกชื่อหรือเลขท้ายบัตรเลยแม้แต่ตัวเดียวครับ
- ในหน้าแอดมิน (
- ทำไมวิธีนี้ถึงปลอดภัย? เพราะคนนอกแกะรหัสตั๋วสุ่มนี้ไม่ได้ และใน URL ไม่มีข้อมูลส่วนตัว (ชื่อ/เบอร์โทร/เลขบัตร) หลุดออกไปเลยครับ
แนวทางที่ 2: การใช้ความสามารถของ PWA (สร้างแอปไว้บนมือถือลูกค้า)
เนื่องจากหน้าบ้านตัวล่าสุดของพี่ มีระบบ PWA (Progressive Web App) ที่กดติดตั้งลงหน้าจอมือถือเป็นแอปได้อยู่แล้ว เราสามารถใช้ประโยชน์จากระบบนี้ร่วมกับระบบเบราว์เซอร์ได้ครับ:
- หลักการทำงาน: 1. ครั้งแรกสุด พี่ส่งลิงก์รวมให้ลูกค้าเข้าปกติ แล้วให้ลูกค้ากรอก “ชื่อจริง + เลขท้ายบัตร 4 หลัก” เพื่อเข้าสู่ระบบครั้งแรก 2. ตอนที่ลูกค้าล็อกอินผ่านแล้ว ให้ JavaScript ฝั่งหน้าบ้านสั่งบันทึกสถานะไว้ในความจำของมือถือที่เรียกว่า
localStorage3. ให้ลูกค้ากด “ติดตั้งแอป (Add to Home Screen)” ไว้บนจอมือถือ 4. หลังจากนั้น ลูกค้าไม่ต้องกดลิงก์อะไรอีกเลยครับ เวลาจะเช็กสถานะประกันภัย แค่กดเปิดไอคอนแอปบนหน้าจอมือถือ โค้ดหน้าบ้านจะไปอ่านคีย์ที่เคยจำไว้ในlocalStorageแล้วล็อกอินสร้าง Session ให้ลูกค้าเข้าดูตารางสีได้เองทันทีใน 1 วินาทีครับ
👨💻 สรุปคำแนะนำ
- ถ้าเน้นความสะดวกรวดเร็วแบบ “ส่งทางไลน์/SMS ให้ลูกค้ากดครั้งเดียวเข้าได้เลยทันทีไม่ต้องพิมพ์” ให้เพิ่มระบบ แนวทางที่ 1 (Secure Token) เข้าไปในโค้ด
- ถ้าเน้นให้ลูกค้าเข้ามาติดตามสถานะบ่อยๆ ตลอดอายุสัญญา แนะนำให้ผลักดัน แนวทางที่ 2 (ให้ลูกค้ากดติดตั้งแอป PWA) ครับ เพราะทำครั้งเดียวจบ สบายยาวๆ ทั้งคนขายและคนซื้อ