ללא אימות SMS, חנות מקוונת עלולה לאבד עד 30% מתקציב הפרסום שלה על הזמנות מזויפות. — לפי דוח הונאות מסחר אלקטרוני לשנת 2023. לאחרונה, לקוח עם חנות חלקי רכב חווה 5,000 הרשמות ביום, מתוכן 40% היו בוטים. לאחר יישום האימות, החשבונות המזויפים ירדו ל-3%, מה שהפחית משמעותית את הוצאות הפרסום. ללא אימות, כל חשבון חמישי הוא מזויף. הפתרון שלנו הוא מודול מותאם אישית עם טבלת מסד נתונים, אנטי-הונאה ואינטגרציה גמישה. מומחי 1C-Bitrix מוסמכים עם ניסיון פיתוח של למעלה מ-10 שנים ויותר מ-500 פרויקטים מוצלחים מבטיחים פעילות יציבה.
מדוע אימות SMS יעיל יותר מ-CAPTCHA
אימות SMS אמין פי 5 מאימות דוא"ל, מכיוון שמספר טלפון מקושר לכרטיס SIM וקשה יותר לייצר אותו. CAPTCHA מרתיעה רק בוטים פשוטים (יעילות של 60%), בעוד שקוד SMS דורש מכשיר אמיתי (יעילות של 99%). עבור חנויות עם מרווחים גבוהים, זה משתלם תוך 1–2 חודשים. לדוגמה, חנות טיפוסית יכולה לחסוך 2,000 דולר בחודש לאחר היישום. בנוסף, אחסון קודים במסד נתונים אמין פי 10 משימוש בסשנים: סשנים פגיעים להתקפות קיבוע סשן, בעוד שטבלה עם אינדקס מבטיחה שלמות.
בחירת ספק SMS
ל-1C-Bitrix אין שער SMS משלו. האינטגרציה נבנית דרך REST API של הספק. אפשרויות פופולריות לשוק הרוסי/חבר העמים:
- SMSC.ru — API ישיר, תיעוד טוב
- SMS.ru — מצב בדיקה חינם (100 SMS חינם)
- MTS Exolve / Beeline — תעריפים עסקיים
- Twilio — לפרויקטים בינלאומיים
חיבור ספק נעשה באמצעות מחלקת עטיפה נפרדת המיישמת ממשק אחיד. זה מאפשר להחליף ספק במידת הצורך ללא שינוי בלוגיקת האימות.
ארכיטקטורת אימות
מדוע לאחסן קודים במסד נתונים במקום בסשן?
אחסון בסשן פגיע להתקפות קיבוע סשן. אנו משתמשים בטבלה נפרדת custom_sms_verification:
CREATE TABLE custom_sms_verification ( id INT AUTO_INCREMENT PRIMARY KEY, phone VARCHAR(20) NOT NULL, code VARCHAR(6) NOT NULL, created_at DATETIME NOT NULL, attempts INT DEFAULT 0, verified TINYINT DEFAULT 0, INDEX idx_phone (phone), INDEX idx_created (created_at) ); ב-Bitrix D7 דרך CREATE TABLE custom_sms_verification ( id INT AUTO_INCREMENT PRIMARY KEY, phone VARCHAR(20) NOT NULL, code VARCHAR(6) NOT NULL, created_at DATETIME NOT NULL, attempts INT DEFAULT 0, verified TINYINT DEFAULT 0, INDEX idx_phone (phone), INDEX idx_created (created_at) ); :
class SmsVerificationTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'custom_sms_verification'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\StringField('PHONE'), new \Bitrix\Main\ORM\Fields\StringField('CODE'), new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), new \Bitrix\Main\ORM\Fields\IntegerField('ATTEMPTS'), new \Bitrix\Main\ORM\Fields\BooleanField('VERIFIED'), ]; } } לאחסון נתוני קוד, ניתן גם להשתמש ב-HL-blocks (Highload-blocks) — נוח לניהול רשומות מממשק הניהול.
כיצד להגן על הקוד מפני ניחוש
הלוגיקה כוללת הגנה: לאחר 3 ניסיונות כושלים, הקוד נחסם ללא קשר לאורך חייו (5–10 דקות). מגבלות נוספות: לא יותר מבקשה אחת לכל 60 שניות למספר, לא יותר מ-5 קודים ליום לכתובת IP. CAPTCHA מופיעה תחת פעילות חשודה.
function sendVerificationCode(string $phone): bool { $code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT); $recent = SmsVerificationTable::getList([ 'filter' => [ '=PHONE' => $phone, '>CREATED_AT' => new \Bitrix\Main\Type\DateTime(date('Y-m-d H:i:s', time() - 60)) ] ])->fetch(); if ($recent) return false; // Too many requests SmsVerificationTable::add([ 'PHONE' => $phone, 'CODE' => $code, 'CREATED_AT' => new \Bitrix\Main\Type\DateTime(), 'ATTEMPTS' => 0, 'VERIFIED' => false, ]); return SmsProvider::send($phone, "Ваш код подтверждения: $code"); } דוגמה לאימות קוד:
function checkVerificationCode(string $phone, string $code): bool { $record = SmsVerificationTable::getList([ 'filter' => [ '=PHONE' => $phone, '=VERIFIED' => false, '>CREATED_AT' => new \Bitrix\Main\Type\DateTime(date('Y-m-d H:i:s', time() - 600)) ] ])->fetch(); if (!$record) return false; if ($record['ATTEMPTS'] >= 3) return false; SmsVerificationTable::update($record['ID'], ['ATTEMPTS' => $record['ATTEMPTS'] + 1]); if ($record['CODE'] === $code) { SmsVerificationTable::update($record['ID'], ['VERIFIED' => true]); return true; } return false; } שילוב אימות SMS עם הרשמה ותשלום
האימות מוטמע בשני מקומות. במהלך ההרשמה — דרך מטפל האירועים \Bitrix\Main\ORM\Data\DataManager. אם מספר הטלפון לא אומת, ההרשמה נחסמת עד לאישור SMS. תהליך אימות לקוח זה מבטיח שרק משתמשים אמיתיים נרשמים. במהלך התשלום — דרך רכיב class SmsVerificationTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'custom_sms_verification'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\StringField('PHONE'), new \Bitrix\Main\ORM\Fields\StringField('CODE'), new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), new \Bitrix\Main\ORM\Fields\IntegerField('ATTEMPTS'), new \Bitrix\Main\ORM\Fields\BooleanField('VERIFIED'), ]; } } . שלב אימות מתווסף לפני אישור ההזמנה הסופי. זה חשוב במיוחד לחנויות המקבלות הזמנות ללא הרשמה. עבור טופס אימות AJAX, נעשה שימוש בבקר:
class SmsVerifyController extends \Bitrix\Main\Engine\Controller { public function sendAction(): array { ... } public function checkAction(string $phone, string $code): array { ... } } ניתן לשלב את האימות גם עם Bizproc כדי להפוך פעולות לאוטומטיות לאחר אישור המספר.
תוכנית יישום שלב אחר שלב
- בחרו ספק ובדקו שליחת הודעות.
- צרו טבלה לאחסון קודים (או HL-block).
- יישמו מחלקת עטיפה לספק עם ממשק אחיד.
- כתבו מטפל שליחת קוד עם מגבלות.
- הטמיעו בטופס ההרשמה דרך אירוע.
- שנו את sale.order.ajax כדי להוסיף שלב אימות.
- הגדירו אנטי-הונאה ונורמליזציה של מספרים.
- בדקו תחת עומס (symulate בוטים).
אילו מגבלות יש להגדיר?
אמצעי הגנה חובה:
| מגבלה | ערך |
|---|---|
| בקשות לשעה למספר | 3 |
| קודים ליום לכתובת IP | 5 |
| CAPTCHA תחת חשד | כן |
| נורמליזציה של מספר | +7XXXXXXXXXX |
מגבלות אלה חוסמות 99% מהבוטים. כאשר חריגה, המשתמש רואה: "נסו שוב בעוד 10 דקות."
מה כוללת העבודה
- תרשים סכמטי של אימות (תיעוד)
- הגדרת ספק SMS ובדיקת ריצה (כולל 100 SMS לבדיקה)
- מחלקת עטיפה לספק עם ממשק אחיד
- מיגרציה של מסד נתונים לאחסון קודים
- מטפלי אירועים להרשמה ושינוי של sale.order.ajax
- הגדרת אנטי-הונאה ומגבלות
- הוראות הפעלה וחודש תמיכה (טלפון/דוא"ל)
- גישה למאגר הידע ולמאגר הקוד שלנו
לוחות זמנים
| היקף העבודה | זמן |
|---|---|
| שליחה + אימות קוד, זרימה בסיסית | 1–2 ימים |
| אינטגרציה עם הרשמה + תשלום | 2–3 ימים |
| אנטי-הונאה, מגבלות, נורמליזציה של מספרים | +יום אחד |
אימות SMS הוא השקעה באיכות בסיס הלקוחות שלכם. חשבון נקי אחד שווה יותר מעשרה מזויפים. הזמינו הגדרת אימות SMS עכשיו — הגנו על בסיס הלקוחות שלכם מפני בוטים. צרו קשר לייעוץ חינם. לצוות שלנו ניסיון של 10+ שנים בפיתוח Bitrix והוא השלים 500+ פרויקטי אינטגרציה.







