ทดสอบอีเมลกู้คืน OAuth โดยไม่ต้องใช้กล่องจดหมายจริง

การทดสอบอีเมลกู้คืน OAuth ด้วยวิธีที่ง่ายเกินไปอาจสร้างความเสี่ยงด้านความปลอดภัย หลายทีมส่งลิงก์รีเซ็ตรหัสผ่านไปยังกล่องจดหมายส่วนกลางเพียงกล่องเดียว พวกเขาแค่ตรวจสอบว่าอีเมลมาถึงหรือไม่แล้วก็จบไป วิธีนี้มีจุดอ่อน เพราะมันปกปิดปัญหาการนำโทเคนกลับมาใช้ใหม่ (token reuse), การส่งอีเมลผิดผู้ใช้ และข้อมูลล็อกที่ละเอียดอ่อน

ควรใช้อีเมลแบบใช้ครั้งเดียว (disposable email address) สำหรับการทดสอบแต่ละรอบ แยกเหตุการณ์ออกมา ตรวจสอบ และลบข้อมูลทิ้ง วิธีนี้จะช่วยป้องกันไม่ให้ข้อมูลการทดสอบที่ปะปนกันทำให้ผลลัพธ์ของคุณพิสูจน์ได้ยาก

โมเดลภัยคุกคาม (threat model) ที่ดีต้องตั้งคำถามเหล่านี้:

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

รูปแบบที่ดีที่สุดคือการใช้หนึ่งกล่องจดหมายต่อการทดสอบหนึ่งครั้ง วิธีนี้จะทำให้ลิงก์และประทับเวลา (timestamp) ทุกอย่างผูกติดอยู่กับการทดสอบรอบนั้นๆ เพียงรอบเดียว

ปฏิบัติตามขั้นตอนดังนี้:

  • สร้าง user fixture หรือตัวตนใน sandbox ใหม่
  • ส่งอีเมลกู้คืนไปยังกล่องจดหมายที่กำหนดไว้เฉพาะรอบการทดสอบ
  • เริ่มการกู้คืน OAuth หรือรหัสผ่านเพียงหนึ่งครั้ง
  • ตรวจสอบ (Assert) ว่ามีอีเมลที่ตรงกันส่งมาเพียงฉบับเดียวเท่านั้น
  • เปิดลิงก์หรือรหัสเพื่อตรวจสอบการหมดอายุและพฤติกรรมการใช้งานได้เพียงครั้งเดียว
  • ทำลายกล่องจดหมายและข้อมูล fixture ทันที

หากกระบวนการของคุณจำเป็นต้องตรวจสอบอีเมลเก่าจากเมื่อวาน แสดงว่ากระบวนการของคุณมีปัญหา หลักฐานการกู้คืนไม่ควรขึ้นอยู่กับข้อมูลที่ล้าสมัย

ตรวจสอบประเด็นเหล่านี้ก่อนนำไปใช้งานจริง (shipping):

  • ชื่อเล่นผู้รับ (recipient alias) ตรงกับตัวตนที่ใช้ทดสอบ
  • มีข้อความกู้คืนที่ใช้งานได้เพียงฉบับเดียวสำหรับเหตุการณ์นั้น
  • หัวข้อและข้อความตัวอย่างไม่เปิดเผยข้อมูลที่ละเอียดอ่อน
  • URL สำหรับการกู้คืนชี้ไปยังสภาพแวดล้อม (environment) ที่ถูกต้อง
  • โทเคนจะใช้งานไม่ได้หลังจากถูกใช้หรือหมดอายุ
  • พฤติกรรมการลองใหม่ (retry) ต้องไม่ทำให้มีโทเคนหลายอันที่ยังใช้งานได้ค้างอยู่

หลีกเลี่ยงความล้มเหลวที่พบบ่อยเหล่านี้:

  • การใช้กล่องจดหมายเดียวซ้ำกับผู้ใช้ทดสอบหลายคน
  • การเก็บ URL กู้คืนไว้ในล็อกที่มีอายุการใช้งานยาวนาน
  • การใส่ที่อยู่อีเมลแบบเต็มในหัวข้ออีเมลกู้คืน
  • การลืมยกเลิกการใช้งานลิงก์เก่าหลังจากมีการร้องขอครั้งที่สอง

ข้อมูลใน Staging มีความสำคัญ เพราะมักจะมีชื่อและการตั้งค่าที่เหมือนจริง ควรใช้ค่าเริ่มต้นที่ปลอดภัย เช่น ระยะเวลาการเก็บรักษาข้อมูลที่สั้น, ความลับแบบใช้ครั้งเดียว และการล้างข้อมูลอย่างชัดเจน

Source: https://dev.to/sophiax99/how-to-test-oauth-recovery-emails-without-exposing-real-inboxes-hni