ทดสอบอีเมลกู้คืน 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
