ป้องกันการถูกโจมตีของ API OTP
หากสคริปต์ยิงคำขอส่ง OTP ซ้ำๆ ผู้ใช้จะได้รับรหัสที่ไม่เกี่ยวข้องจำนวนมาก ยอดเงินถูกใช้เร็ว และชื่อเสียงของช่องทางอาจลดลง EngageLab OTP สามารถจำกัดความถี่และปริมาณฝั่งการส่งได้ แต่ไม่สามารถหยุด API «ขอรหัสยืนยัน» ที่ไม่มีการยืนยันตัวตนในระบบธุรกิจของคุณ
บทความนี้อธิบายวิธีใช้ความสามารถของแพลตฟอร์มร่วมกับการป้องกันฝั่งธุรกิจ เพื่อลดความเสี่ยงที่ API จะถูกโจมตี
สถาปัตยกรรมที่ถูกต้อง
ต้องเรียก EngageLab OTP API จากเซิร์ฟเวอร์ของคุณเท่านั้น ห้ามเรียกโดยตรงจากเบราว์เซอร์ ไคลเอนต์ App หรือมินิโปรแกรม
ผู้ใช้ → ฟรอนต์เอนด์ของคุณ (เข้าสู่ระบบ / ลงทะเบียน / รีเซ็ตรหัสผ่าน)
→ แบ็กเอนด์ของคุณ (ตรวจเซสชัน, CAPTCHA, จำกัดอัตราฝั่งธุรกิจ)
→ EngageLab OTP API (พร้อม API Key และ end_user_ip)
- เก็บ
dev_keyและdev_secretไว้ที่เซิร์ฟเวอร์เท่านั้น ห้ามใส่ในโค้ดฟรอนต์เอนด์ แพ็กเกจแอป หรือคลังสาธารณะ - ฟรอนต์เอนด์ควรเรียกเฉพาะ API «ขอรหัสยืนยัน» ของคุณเอง ห้ามเชื่อมตรงไปที่
https://otp.api.engagelab.cc - แนะนำให้ตั้งอนุกรม IP ของผู้เรียกสำหรับ API Key ฝั่งโปรดักชัน ดู API Key
อย่าปะปน IP สองประเภท
| การตั้งค่า / พารามิเตอร์ | ค่าที่ต้องกรอก | สิ่งที่กันได้ |
|---|---|---|
| รายการอนุญาต IP ของ API Key | IP ขาออกของเซิร์ฟเวอร์คุณ | IP แปลกหน้าที่ใช้ Key เรียก OTP API โดยตรง |
end_user_ip ในคำขอส่ง |
IP ของผู้ใช้ปลายทาง | IP ผู้ใช้เดียวกันที่ขอรหัสซ้ำในเวลาสั้นๆ |
หลังจากเปิดการจำกัด «ตามที่อยู่ IP» ใน ศูนย์ความปลอดภัย แล้ว ต้องส่ง end_user_ip ในคำขอ การส่งรหัส OTP การจำกัดจึงจะมีผล ส่ง IP สาธารณะของอุปกรณ์ผู้ใช้ ไม่ใช่ IP ของเซิร์ฟเวอร์คุณ
การป้องกันฝั่งแพลตฟอร์ม
ตั้งค่าต่อไปนี้ในคอนโซล OTP เพื่อจำกัดความเสียหายหากฝั่งการส่งถูกโจมตี
| สิ่งที่ต้องทำ | ที่ไหน | วัตถุประสงค์ |
|---|---|---|
| ตั้งรายการอนุญาต IP และวันหมดอายุของ API Key และให้ปิดใช้งานได้ตลอดเวลา | API Key | จำกัดผู้ที่เรียก API ได้ และปิดทันทีเมื่อรั่วไหล |
| เปิดจำกัดความถี่สำหรับเบอร์เดียวกันและ IP เดียวกัน | ศูนย์ความปลอดภัย | บล็อกการยิงซ้ำไปยังเบอร์เดียวหรือจาก IP เดียว |
ส่ง end_user_ip ในคำขอส่ง |
การส่งรหัส OTP | ให้การจำกัดตาม IP มีผล |
| ตั้งค่าเตือนและโควตาแบบรายวัน / รายเดือน | ศูนย์ความปลอดภัย | แจ้งเตือนหรือหยุดอัตโนมัติเมื่อปริมาณผิดปกติ |
| ตั้งรายการอนุญาตหรือบัญชีดำตามประเทศ / ภูมิภาค | ศูนย์ความปลอดภัย | หลีกเลี่ยงการส่งไปยังพื้นที่นอกธุรกิจ |
| หยุดช่องทาง SMS คลิกเดียวเมื่อฉุกเฉิน | ศูนย์ความปลอดภัย | ตัดความเสียหายอย่างรวดเร็วขณะถูกโจมตี |
หากต้องการรับการแจ้งเมื่อถึงค่าเตือนหรือโควตา ให้ตั้งค่าอีเวนต์คอลแบ็กใน Webhook ก่อน
การป้องกันฝั่งธุรกิจ
การจำกัดของแพลตฟอร์มทดแทนการป้องกัน API «ขอรหัสยืนยัน» ของคุณไม่ได้ ควรตรวจต่อไปนี้ก่อนเรียก EngageLab
- ทำ human verification (เช่น CAPTCHA รูปภาพ หรือ Turnstile / reCAPTCHA) ก่อนส่งรหัส และตรวจผลที่เซิร์ฟเวอร์
- ตั้งช่วงเวลาก่อนส่งซ้ำสำหรับเบอร์เดียวกัน (เช่น 60 วินาที) และแสดงนับถอยหลังที่ฟรอนต์เอนด์
- จำกัดคำขอต่อบัญชี อุปกรณ์ และ IP ตามนาที ชั่วโมง และวันตามปฏิทิน นับคำขอที่ล้มเหลวด้วย
- «ขอรหัสยืนยัน» ต้องมีสถานะเข้าสู่ระบบ หรือเซสชันที่ถูกต้องในกรณีที่ยังไม่เข้าสู่ระบบ ห้ามเปิดช่องส่งสาธารณะที่ไม่มีบริบท
- จำกัดจำนวนครั้งที่ลองรหัสเดียวกัน และทำให้รหัสหมดอายุทันทีเมื่อตรวจผ่าน EngageLab OTP ไม่รองรับการตรวจรหัสที่ตรวจผ่านแล้วซ้ำอีก
ใช้รหัสข้อผิดพลาดเป็นสัญญาณการถูกโจมตี
การส่งรหัส OTP อาจส่งคืนข้อผิดพลาดต่อไปนี้ในขั้นตรวจก่อนส่ง หากพบ ให้ชะลอการลองใหม่ และตรวจว่ามีการยิงคำขอรวมศูนย์หรือไม่
| รหัสข้อผิดพลาด | สถานะ HTTP | ความหมาย |
|---|---|---|
3004 |
400 | เกินขีดจำกัดความถี่สำหรับเทมเพลตและผู้รับเดียวกัน หน้าต่างจำกัดเป็นไปตามการตั้งค่าเทมเพลต |
6001 |
429 | ความถี่การส่งของเบอร์เดียวกันเกินกำหนด หน้าต่างอาจเป็นนาที ชั่วโมง หรือวันตามปฏิทิน |
6002 |
429 | ความถี่การส่งของ IP ผู้ใช้ปลายทางเดียวกันเกินกำหนด ตรวจเฉพาะเมื่อส่ง end_user_ip |
6003 |
429 | ปริมาณส่งรายวันหรือรายเดือนระดับแอปถึงขีดจำกัด |
6007 |
403 | บริการส่งรหัส SMS ถูกหยุดชั่วคราว อาจเป็นทุกประเทศ / ภูมิภาค หรือประเทศปัจจุบัน |
เมื่อได้รับ HTTP 429 ห้ามลองใหม่ถี่ทันที หากยังเกิดต่อเนื่อง ให้ตรวจที่ศูนย์ความปลอดภัยก่อนว่าถึงโควตาปริมาณหรือหยุดฉุกเฉินหรือไม่ แล้วค่อยติดต่อฝ่ายสนับสนุน
เมื่อ secret รั่วไหล
- ในคอนโซล OTP ปิดใช้งานหรือหมุนเวียน API Key
- ใน ศูนย์ความปลอดภัย ใช้การหยุดฉุกเฉินเพื่อหยุดการส่ง SMS
- ตรวจการส่งที่ผิดปกติใน ประวัติ และคอลแบ็ก
- รัดรายการอนุญาต IP ของ API Key และตรวจว่าโควตารายวัน / รายเดือนเหมาะสมหรือไม่
- กลับมาส่งอีกครั้งเมื่อความเสี่ยงหมดไปเท่านั้น
รายการตรวจก่อนเปิดใช้งานจริง
- เรียก API จากเซิร์ฟเวอร์เท่านั้น
dev_secretไม่อยู่ในฟรอนต์เอนด์ แอป หรือคลังสาธารณะ - API Key โปรดักชันตั้งรายการอนุญาต IP ขาออกของเซิร์ฟเวอร์แล้ว
- ศูนย์ความปลอดภัยเปิดจำกัดความถี่ตามเบอร์แล้ว หากต้องการจำกัดตาม IP คำขอส่งมี
end_user_ip - ตั้งโควตารายวัน / รายเดือนแล้ว และตั้งคอลแบ็กที่เกี่ยวกับปริมาณแล้ว
- API «ขอรหัสยืนยัน» ทำ CAPTCHA และจำกัดอัตราฝั่งธุรกิจก่อนเรียก EngageLab
- ทราบลำดับรับมือเมื่อถูกโจมตีแล้ว: ปิด Key → หยุดฉุกเฉิน → ตรวจบันทึกการส่ง










