טופס ששולח קוד ב-SMS הוא כפתור ששולח מסרונים בתשלום. אלה ההגנות שכל טופס כזה צריך, לפני שבוט מגלה אותו.
טופס ששולח קוד אימות ב-SMS הוא, מנקודת המבט של מי שמשלם, כפתור ששולח מסרון בתשלום. אם אין עליו הגנה, מספיק בוט אחד כדי ללחוץ עליו אלפי פעמים, למספרים שהתוקף מרוויח מכל מסרון שנשלח אליהם, ולרוקן את יתרת המסרונים. התופעה מוכרת בשם SMS pumping. שימוש דומה הוא הצפה של מספר מסוים בעשרות הודעות.
ההגנות שכל טופס צריך
- זמן המתנה לפני קוד חדש. אחרי ששלחו קוד למספר, לא שולחים לאותו מספר קוד נוסף לפני שעבר זמן קצוב, למשל דקה.
- מגבלה לשעה לכל מספר. גם אחרי זמן ההמתנה, מגבילים כמה קודים מספר אחד יכול לקבל בשעה.
- מגבלה לשעה לכל כתובת IP. בוט ששולח למספרים שונים נעצר כאן. בכתובות IPv6 כדאי לספור לפי הרשת כולה ולא לפי כתובת בודדת, כי קל להחליף כתובת בתוך אותה רשת.
- תקרה לכל האתר. מספר מקסימלי של קודים בשעה לכל האתר. זה מה שעוצר מתקפה מכתובות רבות, ותקרה נפרדת לקודי כניסה מבטיחה שהתקפה על טופס ההרשמה לא תחסום את המנהלים.
- רק מספרים שמצפים להם. אם האתר משרת לקוחות בישראל, מקבלים רק מספרי סלולר ישראליים. מספר שלא נראה כמו סלולר לא מקבל מסרון.
- CAPTCHA כשיש עומס. באתרים שמותקפים, בדיקת CAPTCHA לפני שליחת הקוד מוסיפה עוד מחסום.
וגם על הבדיקה של הקוד
- קוד ננעל אחרי כמה ניסיונות שגויים, כדי שאי אפשר לנחש אותו.
- קוד פג אחרי כמה דקות, ועובד פעם אחת בלבד.
- הספירה צריכה להיות אטומית: כשמגיעות עשרות בקשות באותו רגע, כל אחת חייבת לראות את המונה המעודכן. אחרת אפשר לשלוח מאה ניחושים במקביל ולעקוף את מגבלת הניסיונות.
איפה זה כבר בנוי
התוסף Meser10 OTP לוורדפרס כולל את המגבלות האלה, והמגבלות המספריות ניתנות לשינוי במסך ההגדרות. CAPTCHA אינה מובנית בו, ואפשר לחבר אותה דרך מסנן שעוצר שליחה. גם החבילות ל-Node.js, Python ו-PHP אוכפות זמן המתנה, מגבלת ניסיונות ותוקף בספירה אטומית, ומשאירות לכם להוסיף מגבלה לפי IP ולפי חשבון. הפרטים במדריך OTP למפתחים.
קוד אימות ב-SMS לאתר שלכם
פותחים חשבון מסר 10, מקבלים מפתח API ושם שולח, ומחברים את האתר.
פתחו חשבון חינם