С ростом популярности сервиса мы столкнулись с нереально большим количеством мошенников, которые регистрировали фейковые аккаунты и спамили других пользователей (порно, наркотики и вся остальная запрещёнка). Дошло до того, что таких регистраций стало в несколько раз больше, чем настоящих пользователей. Жалобы и отток нормальных посетителей положили начало нашей борьбе.

Изначально подтверждение регистрации было через email (сервис существует с 2007 года), но с ростом посещаемости мы заметили аномально резкий всплеск подозрительных регистраций. Решили внедрить подтверждение ключевых действий с аккаунтом, привязав их к мобильному телефону.

Отправка SMS на короткий номер

Первый вариант верификации был через отправку пользователем исходящего sms на короткий номер. Люди отправляли сообщение на самый дешевый короткий номер, тем самым подтверждали свой. В 2010 году это казалось решением проблемы, не требующим существенных затрат. Мы были одни из первых, кто это внедрил, а тогда больше половины пользователей принципиально не хотели “светить” свой номер мобильного телефона. Мало того, отправка на номер для пользователя была платной, хоть и минимальной стоимости – около 2? (сумму забирал себе оператор), и требовала дополнительного действия. Вдобавок: поддерживались не все операторы, а сами короткие номера тогда часто ассоциировались с мошенниками. Хлынули жалобы, конверсия регистраций упала. Стало понятно, что решение выбрано неудачно.

Подтверждение SMS с кодом

Решили внедрить отправку клиенту sms с кодом. Несмотря на существенные расходы в пределах 50000? (около 1,500$ по тому курсу) на подтверждения и восстановления паролей, команда вздохнула с облегчением и о проблеме надолго забыли. Время и трудозатраты на борьбу со спамерами изматывали сильнее, чем дополнительные расходы.

Всё изменилось ближе к 2015 году, когда сотовые операторы ввели интерконнект. До этого исходящие сообщения стоили очень дешево (от 10 копеек) из-за возможности отправлять смски через региональных операторов в обход прямых подключений, не теряя в качестве доставки. После интерконнекта операторы стали блокировать отправку sms из других сетей своим абонентам, если она происходила от незарегистрированного имени отправителя. У заказчиков и агрегаторов не было выхода, кроме как подключаться напрямую и отправлять через прямые официальные каналы, которые в целом были всегда, но стоили до 10 раз дороже. Для усиления эффекта основные операторы выкупили почти всех тех мелких, через которых можно было отправлять сообщения дешево. Когда рынок стал монополизирован, операторы еще сильнее подняли цены на смски и продолжают это делать каждый год.

После повышения цен затраты увеличились на порядок: до 300000-400000? в месяц. Рост количества пользователей и “платные плюшки” ещё позволяли нести такие издержки, но шутки про то, что затраты на sms превышают затраты на несколько десятков серверов – уже перестали быть смешными. Но других вариантов не было: безопасность аккаунта и блокировка спамеров важнее, приходилось платить. 

Тем временем география пользователей расширилась за пределы России, в первую очередь за счет СНГ. А это, в свою очередь, совпало с желанием заработать и у операторов соседних стран: Украина, Беларусь, Казахстан, Киргизия и других. Они решили, что 1-2? за sms – это не предел, давайте повысим до 7-13?! Так было введено разделение трафика на национальный и международный с разницей в несколько раз.

Примеры:

Страна\Стоимость SMS

Национальные

Международные

Казахстан 

1,5 ?

7 ?

Беларусь

0,75 ?

11 ?

Украина

1 ?

5 ?

Под международный трафик автоматически попадают все известные международные бренды, все проекты, которые не имеют в данной стране юр.лица и национального домена. Некоторые страны (особенно Казахстан) еще изобретательнее подошли к вопросу: если у проекта есть сайт в другой доменной зоне (например, не только site.kz, но еще и .ru), проект не может быть согласован по национальному тарифу, несмотря на то, что sms отправляются от имени местного проекта и только по Казахстану местным жителям. Попробуешь обойти – огромный штраф и блокировка имени.  

Звонок с кодом голосом

Расходы на sms перевалили за психологический барьер 1 млн ? в месяц, что само по себе всерьез заставляло задуматься над альтернативами. Но вместе с ростом расходов вернулась и старая проблема в новом обличии. Теперь благодаря куче сервисов по приему sms в выдаче Яндекса на виртуальные номера стало легко зарегистрировать аккаунт для любой социальной сети, включая VK и Facebook.

Так мы начали работать над аутентификацией через звонки. Идея пришла к нам несколько лет назад и была внедрена как дополнительный резервный способ подтверждения номера для некоторых стран. Действие от клиента требовалось такое же, как с sms – ввести код, который мы отправляем, только в случае со звонками код диктовался голосом при ответе на звонок.

Как это выглядело на сайте
Как это выглядело на сайте

Но и тут есть подводные камни: по России и некоторым странам звонки работают хорошо, но из-за международной тарификации стоимость минуты по некоторым направлениям превышает 20-30? (например: Беларусь, Украина и др). Вторая проблема – качество доставки: операторы могут фильтровать трафик по длительности соединения. Звонки определяются операторами, как спам и фильтруются, а значит пользователь не получает свой код подтверждения.

Еще был Viber

И предупреждение с угрозой штрафа в 5000 евро за отправку «запрещенного контента»?. Пока мы тестировали новый способ и часть пользователей получали приветственное сообщение при регистрации вида “Здравствуйте, %username%!”, – пранкеры подсуетились и начали оформлять “левые” регистрации на чужие номера. Людям пришли сообщения вида “Здравствуйте, Жопа”:

Детализация из кабинета оператора
Детализация из кабинета оператора

Заметили быстро и лавочку прикрыли, но собрали негатив. Сам же Viber показал низкое проникновение (порядка 15-25%) и экономическую нецелесообразность из-за минимального платежа в ~30000?, который сгорает в конце месяца, если пакет услуг на эту сумму, при цене сервисного сообщения в ~50 копеек, не был использован.

Звонок с кодом в номере

В итоге пришли к подтверждению регистраций звонком без соединения, когда кодом являются последние 4 цифры номера, с которого происходит звонок пользователю.

Как выглядит форма в мобильном приложении
Как выглядит форма в мобильном приложении

Манила цена сервисов: от 10 копеек за такой звонок. Протестировав их оказалось, что за эту стоимость звонки доставляются не всегда, в некоторые страны звонки через них в принципе не работают. Интересно, что у некоторых провайдеров звонок стоит от 4?, что даже дороже sms. Как выяснилось позже - дешевые сервисы использовали серые каналы, подменяли исходящие номера на чужие или несуществующие и сами не платили за трафик. Клиент, перезвонивший по такому номеру, мог обнаружить на другом конце прачечную или секс-шоп.

Стало понятно, что гарантия доставки может быть лишь при наличии своих пулов номеров и “белых” каналов, а значит и экономии в 20 раз не получится. В партнерстве с greensms.ru под нас запустили сервис со своими номерами и резервными каналами, а позже – добавили в API и выложили SDK к нему на разных языках на GitHub. В процессе оказалось, что даже при нулевой продолжительности соединения с абонентом, вышестоящие операторы связи произвольно тарифицируют количество секунд разговора (кстати, кто сталкивался с подобным и смог решить это с оператором или на стороне Asterisk – напишите, пожалуйста, в комментариях). В итоге удалось добиться стабильных результатов при стоимости в 40-60 копеек.

Сначала пользователи встретили нововведения замешательством. Конверсия при использовании sms >95%, звонки сейчас показывают ~85%. Еще год назад конверсия была, примерно на 10% хуже, но стала расти по мере распространенности метода и с изменениями в интерфейсе.

Статистика конверсии по странам в админке
Статистика конверсии по странам в админке

Люди не понимали, где брать 4 цифры, в каком номере, сбрасывали вызов, запрашивали повторный и потом всё равно обращались в поддержку, приходилось всё объяснять, показывать. 

Сейчас проще: всё больше проектов используют этот способ, люди привыкли и не так удивляются. Кстати, теперь еще и Яндекс их внедрил для подтверждения номера при входе на новом устройстве в свой аккаунт. 

Совет: обязательно размещать рядом с полем ввода цифр скриншот телефона с выделенными 4 цифрами, которые нужно будет ввести пользователю.
Где допустимо – стоит подключать автоматическое считывание цифр номера при регистрации из приложения.

Количество фейковых регистраций упало до минимума. Но новый метод привлекает новые попытки использовать его в своих целях: спам звонками, попытки спарсить базу телефонов пользователей и прочее непотребство, требующее превентивных мер.

Финальная битва между добром и интернетом

А не будет её – финальной. Чем популярнее становится сервис, тем больше желающих использовать его в плохих целях. И на новые методы защиты находятся новые методы нападения. Так что ждем новых ухищрений, может с помощью eSIM?

Жаль, что меры безопасности зачастую снижают удобство использования для обычных пользователей. Но радует, что улучшение юзабилити и адаптация к новому – тоже непрерывный процесс.