אימות
קוד אימות שמגיע לפני שהמשתמש מוותר
קוד חד פעמי במייל הוא ההודעה הרגישה ביותר לעיכוב שיש: אם הוא מגיע אחרי שלושים שניות, המשתמש כבר לחץ שלח שוב, ואם הוא מגיע אחרי דקה הוא כבר לא רלוונטי. הכול כאן מסתכם בזמן ובתוקף.
אותו API, בקריאה אחת, ומזהה שמאפשר למדוד כמה זמן זה לקח
חיי קוד
מה קורה לקוד אחד, משנייה אפס ועד שהוא נפסל
ציר הזמן שכל מימוש OTP צריך לעמוד בו, ואיפה רוב המימושים נשברים.
- 0 שניות בקשה המערכת שלכם מייצרת קוד ושומרת אותו עם חותמת זמן
- 1 שנייה קריאה ל-API הודעה אחת, הקוד בשורת הנושא
- 3 עד 10 שניות בתיבה המשתמש קורא אותו מההתראה, בלי לפתוח
- עד 10 דקות תוקף אחרי שימוש אחד הקוד נפסל, גם אם נשאר זמן
- ניסיון 6 חסימה חמישה ניסיונות שגויים, ואז המתנה
הכללים
שישה כללים שהופכים OTP לבטוח באמת
רוב מימושי ה-OTP נשברים באחד מהמקומות האלה, ולרוב בשניים:
- תוקף קצר: חמש עד עשר דקות, לא שעה
- מספר ניסיונות מוגבל, וחסימה זמנית אחריהם
- קוד חד פעמי באמת: אחרי שימוש הוא נפסל, גם אם התוקף לא נגמר
- בקשת קוד חדש מבטלת את הקודם, אחרת שני קודים תקפים במקביל
- הגבלת קצב לפי חשבון ולפי כתובת IP, כדי למנוע ניחוש
- הקוד בגוף ההודעה ובשורת הנושא, כדי שאפשר יהיה לקרוא אותו מההתראה בלי לפתוח
ההשוואה
OTP במייל או ב-SMS, ומה עדיף מתי
| מייל | SMS | |
|---|---|---|
| עלות להודעה | זניחה | מחויב לפי חלקים, ובעברית פי שניים |
| מהירות הגעה | שניות עד עשרות שניות | שניות, בדרך כלל |
| תלות בקליטה | אין, עובד גם ב-Wi-Fi בלבד | דורש קליטה סלולרית |
| הגעה לתיבה | תלוי באימות הדומיין ובסינון | כמעט ודאית |
| משתמש בחו״ל | עובד ללא הבדל | יקר, ולפעמים חסום |
| אבטחה | חזק כמו תיבת הדואר של המשתמש | חשוף להחלפת כרטיס SIM |
לרוב המערכות מייל הוא ברירת המחדל הנכונה, ו-SMS שמור למקרים שבהם התיבה עצמה היא מה שמשחזרים.
בפועל
איך זה נראה בקוד
אותו API של השליחה, בקריאה אחת. מפתח האידמפוטנטיות הוא מזהה הבקשה, כדי שלחיצה כפולה על „שלח שוב״ לא תייצר שני קודים.
POST /v1/send
{
"from": "auth@yourdomain.co.il",
"to": "user@example.com",
"subject": "הקוד שלך: 481 205",
"html": "<p>הקוד תקף לעשר דקות</p>",
"idempotency_key": "otp-request-9f2c1"
}
- 1 מייצרים קוד בצד שלכם אקראי, קצר, ונשמר עם חותמת זמן ומספר ניסיונות. אנחנו לא מייצרים אותו במקומכם
- 2 שולחים בקריאה אחת הקוד בשורת הנושא, כדי שייקרא מההתראה. מפתח האידמפוטנטיות מונע קוד כפול
- 3 מודדים שומרים את שעת הקריאה ושעת האימות. אם החציון עולה מעל עשר שניות, יש מה לבדוק באימות הדומיין
מה מודדים
איך מודדים שקוד אימות מגיע מספיק מהר, ומה עושים כשלא
המדד היחיד שמעניין בקוד חד פעמי הוא הזמן מהבקשה ועד שהמשתמש הקליד אותו, וזה מספר שרק אתם יכולים למדוד, כי רק אצלכם יש את שני הרגעים. שומרים את שעת הקריאה ל-API ואת שעת האימות המוצלח, ומסתכלים על החציון פעם בשבוע. עד עשר שניות זה טוב. מעל שלושים שניות המשתמשים כבר לוחצים „שלח שוב”, ואז חשוב שהבקשה החדשה תבטל את הקוד הקודם, אחרת שני קודים תקפים במקביל.
כשהחציון עולה, הסיבה כמעט אף פעם אינה המערכת אלא הכתובת שממנה הקוד יוצא. שרת של נמען שמקבל הודעה מכתובת בלי אימות תקין משהה אותה לבדיקה או מפנה לספאם, וקוד אימות בספאם הוא קוד שלא הגיע. כתובת נפרדת לאימות, על דומיין עם שלוש רשומות תקינות, שלא שולחת שום דבר אחר, היא הפתרון הפשוט: המוניטין שלה נבנה רק מהודעות שאנשים מצפים להן ופותחים מיד.
ולגבי מייל מול מסרון: מייל הוא ברירת המחדל הנכונה לרוב המערכות, כי הוא כמעט חינם, עובד גם בלי קליטה סלולרית ולמשתמש בחו״ל, וחסין להחלפת כרטיס SIM. הוא אינו מתאים כשמה שמשחזרים הוא הגישה לתיבה עצמה, כי אז הקוד נשלח למקום שהמשתמש לא יכול להיכנס אליו. שם, ורק שם, מסרון הוא הבחירה, ואת המסרונים שולחת EmailPro מאותה קבוצה.
שאלות על קוד אימות
כמה זמן צריך להיות תוקף של קוד חד פעמי
בין חמש לעשר דקות ברוב המקרים. תוקף קצר מדי מכריח משתמשים לבקש קוד חדש ומגדיל את העומס, ותוקף ארוך מדי משאיר חלון פתוח למי שהשיג גישה לתיבה. אחרי שימוש הקוד צריך להיפסל מיד, בלי קשר לתוקף שנשאר.
למה קודי האימות שלנו מגיעים באיחור
הסיבה הנפוצה ביותר היא כתובת שולח בלי אימות תקין, שגורמת לשרת של הנמען להשהות את ההודעה לבדיקה או לשלוח אותה לספאם. השנייה היא שליחת הקודים מאותה כתובת שממנה יוצאים קמפיינים עם תלונות. כתובת נפרדת לאימות, על דומיין מאומת, פותרת את שתיהן.
כדאי לשים את הקוד בשורת הנושא
כן, וזו אחת השיפורים הפשוטים ביותר בחוויית המשתמש: הקוד נראה בהתראה במסך הנעילה בלי לפתוח את ההודעה. חשוב שהנושא לא יכיל שום דבר נוסף רגיש, וששאר גוף ההודעה יסביר מה לעשות אם לא ביקשתם את הקוד.
OTP במייל בטוח מספיק
הוא בטוח בדיוק כמו תיבת הדואר של המשתמש, ולכן הוא לא מתאים כשמה שמשחזרים הוא הגישה לתיבה עצמה. לעומת זאת הוא חסין להחלפת כרטיס SIM, שהיא וקטור התקיפה הנפוץ נגד OTP במסרונים.