CVV คือรหัสตัวเลขสั้น ๆ ที่พิมพ์อยู่บนบัตรและไม่ได้ถูกบันทึกไว้ในแถบข้อมูลของบัตร รหัสนี้จึงทำหน้าที่พิสูจน์ว่าผู้ที่กำลังกรอกข้อมูลมีบัตรอยู่ในมือจริง ไม่ได้เพียงลอกหมายเลขมาจากที่ใดที่หนึ่ง บทความนี้อธิบายว่ารหัสนี้อยู่ตรงไหนบนบัตร ต่างจากรหัสที่ผู้ใช้กดที่ตู้หรือเครื่องรูดบัตรอย่างไร และเหตุใดกฎของอุตสาหกรรมบัตรจึงห้ามเก็บรหัสนี้ไว้หลังการอนุมัติ
CVV คืออะไรและอยู่ตรงไหนบนบัตร?
รหัสนี้มีชื่อเรียกได้หลายแบบตามเอกสารของแต่ละเครือข่าย แต่ความหมายเดียวกันคือรหัสตรวจสอบความถูกต้องของบัตร ในบัตรส่วนใหญ่จะพิมพ์อยู่ที่แถบลายเซ็นด้านหลังบัตร เป็นตัวเลขสามหลัก และมักมีตัวเลขอื่นที่พิมพ์ต่อท้ายอยู่ด้วย ซึ่งไม่ใช่ส่วนหนึ่งของรหัสที่ต้องกรอก
ข้อยกเว้นที่ควรรู้คือบัตรบางตระกูลพิมพ์รหัสสี่หลักไว้ที่ด้านหน้าบัตร ใกล้กับหมายเลขบัตร และตำแหน่งนี้ทำให้ผู้ใช้สับสนได้ง่ายเพราะอยู่ติดกับตัวเลขอื่น ฟอร์มที่ดีจึงบอกให้ชัดว่าให้กรอกกี่หลัก และวางคำอธิบายไว้ใกล้ช่องกรอกมากพอที่ผู้ใช้ไม่ต้องย้อนกลับไปดูบัตรซ้ำแล้วซ้ำอีก
สิ่งสำคัญที่ทำให้รหัสนี้ต่างจากหมายเลขบัตรคือ มันไม่ได้ถูกเข้ารหัสไว้ในแถบแม่เหล็กของบัตร ผู้ที่อ่านข้อมูลจากแถบแม่เหล็กจึงไม่ได้รหัสนี้ไปด้วย นี่คือเหตุผลเชิงออกแบบที่ทำให้รหัสนี้มีคุณค่าในการยืนยันว่าเป็นบัตรจริง ไม่ใช่สำเนาข้อมูล
CVV ต่างจากรหัส PIN ตรงไหน?
ผู้ใช้อ่านคำถามนี้บ่อยมาก และความสับสนระหว่างสองอย่างนี้ทำให้มีการกรอกรหัสผิดประเภทซ้ำแล้วซ้ำอีก ความต่างอยู่ที่ว่าใครเป็นผู้ตรวจสอบ
รหัสที่ผู้ใช้กดที่เครื่องอ่านบัตรหรือตู้บริการเงินสดเป็นความลับที่ผู้ถือบัตรกำหนดเองไว้กับผู้ออกบัตร ระบบของร้านค้าปลีกไม่เคยเห็นรหัสนั้นเลย การตรวจสอบเกิดขึ้นระหว่างเครื่องอ่านบัตรกับผู้ออกบัตรโดยตรง ส่วนรหัสบนบัตรที่กรอกในแบบฟอร์มออนไลน์นั้น ถูกส่งผ่านระบบรับชำระเงินไปพร้อมกับคำขออนุมัติ และไม่มีใครนำไปใช้กดเงินที่ตู้ได้
ในทางกฎระเบียบ ความต่างนี้สำคัญมาก เพราะรหัสที่ผู้ถือบัตรกำหนดเองมีข้อกำหนดคุ้มครองที่เข้มงวดกว่ารหัสบนบัตร และทั้งสองอย่างมีข้อจำกัดที่ห้ามจัดเก็บไว้หลังการทำรายการเช่นเดียวกัน
อีกจุดที่ควรแยกให้ออกคือรหัสผ่านใช้ครั้งเดียวที่ธนาคารส่งให้ทางข้อความสั้นหรือแอปพลิเคชัน ซึ่งเป็นกลไกยืนยันตัวตนคนละชั้นกับรหัสบนบัตร และไม่ได้พิมพ์อยู่บนบัตรเลย การนำข้อความยืนยันตัวตนประเภทนี้มาใช้ในแบบฟอร์มชำระเงินเป็นความเข้าใจผิดที่ทำให้ผู้ใช้กรอกผิดบ่อยครั้ง
ทำไม CVV จึงห้ามถูกเก็บไว้หลังอนุมัติ?
เหตุผลสั้น ๆ คือถ้าระบบเก็บรหัสนี้ไว้ ผู้ที่เข้าถึงฐานข้อมูลนั้นจะได้ข้อมูลครบชุดสำหรับสร้างธุรกรรมซ้ำทันที หมายเลขบัตร วันหมดอายุ และรหัสบนบัตรที่อยู่ด้วยกันคือสิ่งที่เพียงพอต่อการทำรายการโดยไม่ต้องมีตัวบัตร
ด้วยเหตุนี้ข้อกำหนดด้านความปลอดภัยของอุตสาหกรรมบัตรจึงกำหนดชัดเจนว่าข้อมูลยืนยันตัวตนซึ่งรวมถึงรหัสบนบัตรและข้อมูลเต็มของแถบแม่เหล็ก ต้องไม่ถูกจัดเก็บไว้ในระบบหลังการอนุมัติเสร็จสิ้น นี่ไม่ใช่คำแนะนำเชิงปฏิบัติที่ดีที่สุด แต่เป็นข้อกำหนดที่ผู้รับชำระเงินต้องปฏิบัติตาม
ในทางกลับกัน ข้อกำหนดเดียวกันก็กำหนดด้วยว่าข้อมูลบัญชีที่จัดเก็บไว้ต้องได้รับการคุ้มครอง และเมื่อต้องแสดงผลให้แสดงเพียงบางส่วน เช่น หลักต้นและหลักท้ายไม่กี่หลัก วิธีปฏิบัติเหล่านี้อธิบายไว้ละเอียดขึ้นในบทความเรื่องข้อมูลทดสอบกับ PCI DSS
ฟอร์มชำระเงินจำเป็นต้องมีช่อง CVV เสมอไหม
ไม่เสมอไป ช่องนี้มีความจำเป็นสูงสุดเมื่อทำธุรกรรมที่ไม่ได้ใช้ตัวบัตร แต่ในบางกรณีก็ไม่ถูกเรียกใช้หรือถูกทำให้ข้ามได้
- ธุรกรรมที่ผู้ใช้ยังไม่ได้ผูกบัตรไว้กับร้านค้าและต้องกรอกข้อมูลบัตรทุกครั้ง มักต้องมีช่องนี้
- ธุรกรรมที่ทำรายการต่อเนื่องกับบัตรที่บันทึกไว้ก่อนหน้านี้ มักไม่ถูกเรียกใช้ เพราะระบบอ้างอิงบัตรที่บันทึกไว้แล้ว
- ธุรกรรมที่เป็นการยืนยันตัวตนเพิ่มเติมตามข้อกำหนดเฉพาะ อาจถูกแทนที่ด้วยขั้นตอนยืนยันจากแอปหรือข้อความสั้น
- ธุรกรรมที่ทำผ่านตัวอ่านบัตรจริงหรือกระเป๋าเงินดิจิทัล ไม่ต้องให้ผู้ใช้พิมพ์รหัสนี้เลย
การเพิ่มช่องโดยไม่รู้ว่าเรียกใช้เมื่อใดทำให้ฟอร์มยาวขึ้นและเพิ่มโอกาสที่ผู้ใช้กรอกผิด ถ้าธุรกิจของคุณมีทั้งแบบบันทึกบัตรและแบบกรอกใหม่ ควรแสดงหรือซ่อนช่องนี้ตามบริบทให้ชัดเจน
สิ่งที่ควรทำเมื่อพบ CVV ในที่ที่ไม่ควรอยู่
ข้อผิดพลาดที่เกิดบ่อยไม่ได้มาจากเจตนาร้าย แต่มาจากความเคยชินของทีมงาน ลองตรวจดูว่าองค์กรของคุณมีพฤติกรรมเหล่านี้หรือไม่
- ส่งรหัสผ่านช่องทางพูดคุยของทีมเพื่อให้เพื่อนร่วมงานทดสอบฟอร์มซ้ำ
- เก็บรหัสไว้ในไฟล์บันทึกของระบบเพื่อช่วยวิเคราะห์ปัญหา
- ใส่รหัสลงในตั๋วสนับสนุนหรือเอกสารที่แชร์กันทั้งทีม
- เก็บรหัสไว้ในฐานข้อมูลชั่วคราวเพื่อรอผลลัพธ์จากผู้ให้บริการชำระเงิน
- คัดลอกข้อมูลจริงชุดหนึ่งไว้ในเครื่องทดสอบเพื่อความสะดวกในการสาธิต
ทุกข้อข้างต้นเป็นการเก็บข้อมูลที่ห้ามเก็บ ไม่ว่าจะตั้งใจหรือไม่ การแก้ไขที่ดีที่สุดคือทำให้ข้อมูลเหล่านี้ไม่ถูกบันทึกตั้งแต่ต้นทาง แล้วใช้ข้อมูลสมมติในทุกขั้นตอนทดสอบ
สำหรับนักพัฒนา: เก็บเท่าที่จำเป็นและปิดการบันทึกโดยปริยาย
สิ่งที่ทำได้จริงในระดับงานพัฒนาเริ่มจากการกำหนดให้ข้อมูลยืนยันตัวตนเป็นค่าที่ “ผ่านทางเท่านั้น” ไม่มีเส้นทางใดในระบบที่เขียนค่าลงที่จัดเก็บถาวรได้ วิธีปฏิบัติที่ช่วยได้มากมีดังนี้
- ประกาศให้ชัดว่าห้ามบันทึกค่าดังกล่าวลงไฟล์บันทึกของระบบในทุกระดับความละเอียด
- ปิดการบันทึกข้อมูลที่ส่งเข้ามาแบบอัตโนมัติในส่วนรับคำขอ เพื่อไม่ให้ค่าหลุดลงไฟล์โดยไม่ตั้งใจ
- ทำความสะอาดค่าทันทีหลังใช้เสร็จ และไม่ส่งต่อให้บริการอื่นที่ไม่จำเป็นต้องใช้
- ทดสอบว่าหน้าจอแสดงข้อผิดพลาดไม่พิมพ์ค่าที่ผู้ใช้กรอกกลับออกมาเต็ม ๆ
- ใช้ข้อมูลสมมติในทุกการทดสอบ ไม่ใช้ข้อมูลบัตรจริงแม้แต่ชุดเดียว
หมายเลขที่สร้างขึ้นจากเครื่องมือบนเว็บไซต์นี้มีความถูกต้องเชิงโครงสร้างครบถ้วน แต่ไม่เคยถูกออกให้กับบัญชีใดและไม่มีอยู่จริง จึงใช้ได้เฉพาะกับงานทดสอบซอฟต์แวร์เท่านั้น ห้ามใช้กับเส้นทางรับชำระเงินจริงไม่ว่ากรณีใด
เมื่อรูปแบบของข้อมูลทดสอบครบทั้งหมายเลข วันหมดอายุ และรหัสยืนยันแล้ว ควรทดลองไล่กรอกด้วยมือเพื่อดูว่าฟอร์มแจ้งเตือนเข้าใจง่ายจริงหรือไม่ ซึ่งเป็นหัวข้อที่กล่าวถึงในเช็กลิสต์ทดสอบฟอร์มชำระเงิน
ก้าวต่อไป
เริ่มจากการตรวจว่าฐานข้อมูล ไฟล์บันทึก และช่องทางพูดคุยของทีมไม่มีรหัสบนบัตรตกค้างอยู่ จากนั้นจึงปรับให้ข้อมูลยืนยันตัวตนเป็นค่าที่ผ่านทางได้แต่เก็บไม่ได้ในทุกระบบ และถ้าคุณต้องเตรียมชุดข้อมูลทดสอบที่ครบทั้งสามช่องพร้อมกัน ลองอ่านรูปแบบวันหมดอายุบัตรเครดิตต่อ เพื่อให้การทดสอบฟอร์มครอบคลุมทุกช่องที่ผู้ใช้ต้องกรอกจริง