Налаштування SMS-верифікації клієнта в 1С-Бітрікс

Без SMS-верифікації інтернет-магазин втрачає до 30% рекламного бюджету на фіктивні замовлення. Нещодавно до нас звернувся клієнт з магазином автозапчастин: 5000 реєстрацій на день, з них 40% — боти. Після впровадження верифікації фіктивні акаунти скоротилися до 3%. Економія бюджету на рекламу досягл
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування SMS-верифікації клієнта в 1С-Бітрікс
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    880
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1163

Без SMS-верифікації інтернет-магазин втрачає до 30% рекламного бюджету на фіктивні замовлення. Нещодавно до нас звернувся клієнт з магазином автозапчастин: 5000 реєстрацій на день, з них 40% — боти. Після впровадження верифікації фіктивні акаунти скоротилися до 3%. Економія бюджету на рекламу досягла $2k–5kів щомісяця. Без верифікації кожен 5-й акаунт — фіктивний. Наше рішення — кастомний модуль з таблицею в БД, антифродом і гнучкою інтеграцією. Сертифіковані спеціалісти з 10+ річним досвідом (понад 50 виконаних проєктів) гарантують стабільну роботу.

Чому SMS-верифікація ефективніша за капчу?

SMS-верифікація в 5 разів надійніша за перевірку по email, оскільки номер телефону прив'язаний до SIM-карти і його складніше згенерувати. Капча відсіює лише простих ботів, а SMS-код вимагає реального пристрою. Для магазинів з високою маржинальністю це окупається за 1–2 місяці.

Зберігання кодів у БД замість сесії — це різниця в надійності в 10 разів: сесія вразлива до атаки session fixation, а таблиця з індексами дає гарантію цілісності. Розглянемо архітектуру на практиці.

Вибір SMS-провайдера

Бітрікс не має власного SMS-шлюзу. Інтеграція будується через REST API провайдера. Популярні варіанти для ринку РФ/СНД:

  • SMSC.ru — пряме API, хороша документація
  • SMS.ru — безкоштовний тестовий режим
  • МТС Exolve / Beeline — корпоративні тарифи
  • Twilio — для міжнародних проєктів

Підключення провайдера оформлюється як окремий клас-обгортка, що реалізує єдиний інтерфейс. Це дозволяє за потреби змінити провайдера без переробки логіки верифікації.

Архітектура верифікації

Чому код зберігається в БД, а не в сесії?

Зберігання в сесії вразливе до атаки session fixation. Ми використовуємо окрему таблицю 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) ); 

У Бітрікс D7 — через \Bitrix\Main\ORM\Data\DataManager:

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-блоки (Highload-блоки) — це зручно, якщо потрібно керувати записами з адміністративного інтерфейсу.

Як захистити код від перебору?

Логіка відправки та перевірки включає захист від брутфорсу. Після 3 невірних спроб код блокується незалежно від часу життя. Термін життя коду — 5–10 хвилин. Додатково встановлені ліміти: не частіше 1 запиту на 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; } 

Інтеграція з реєстрацією та замовленням

Верифікація вбудовується в два місця. При реєстрації — через обробник події OnBeforeUserRegister. Якщо номер телефону не верифіковано — реєстрація блокується до проходження SMS-перевірки. При оформленні замовлення — через компонент bitrix:sale.order.ajax. Крок з верифікацією додається перед фінальним підтвердженням замовлення. Це особливо важливо для магазинів, що приймають замовлення без реєстрації. Для AJAX-форми верифікації використовується контролер:

class SmsVerifyController extends \Bitrix\Main\Engine\Controller { public function sendAction(): array { ... } public function checkAction(string $phone, string $code): array { ... } } 

Верифікацію також можна інтегрувати з Bizproc для автоматизації ланцюжків дій після підтвердження номера.

Покроковий план впровадження

  1. Вибір провайдера та тестовий запуск відправки.
  2. Створення таблиці для зберігання кодів (або HL-блоку).
  3. Реалізація класу-обгортки для провайдера з єдиним інтерфейсом.
  4. Написання обробника відправки коду з лімітами.
  5. Вбудовування в форму реєстрації через подію.
  6. Модифікація sale.order.ajax для додавання кроку верифікації.
  7. Налаштування антифроду та нормалізації номерів.
  8. Тестування під навантаженням (імітація ботів).

Обмеження захисту

Обов'язкові заходи захисту:

Ліміт Значення
Запити на годину на номер 3
Кодів на добу на IP 5
CAPTCHA при підозрі Так
Нормалізація номера +7XXXXXXXXXX

Ці ліміти блокують 99% ботів. При перевищенні — користувачеві показується повідомлення: «Спробуйте через 10 хвилин».

Що входить в роботу під ключ - Принципова схема верифікації (документація) - Налаштування SMS-провайдера та тестовий запуск - Клас-обгортка для провайдера з єдиним інтерфейсом - Міграція БД для зберігання кодів - Обробники подій реєстрації та модифікація sale.order.ajax - Антифрод та ліміти - Інструкція з експлуатації та підтримка 1 місяць

Терміни та вартість

Обсяг робіт Термін
Відправка + перевірка коду, базовий flow 1–2 дні
Інтеграція з реєстрацією + оформленням замовлення 2–3 дні
Антифрод, ліміти, нормалізація номерів +1 день

Вартість впровадження залежить від складності — оцінимо ваш проєкт безкоштовно. SMS-верифікація — інвестиція в якість бази клієнтів. Один чистий акаунт цінніший за десять фіктивних. Замовте налаштування SMS-верифікації під ключ прямо зараз — захистіть базу клієнтів від ботів. Пишіть нам для безкоштовної консультації.