Если вы запускаете проект, предлагающий пробный период или ограниченное использование определенных функций, то неизбежно столкнетесь с пользователями, которые попытаются использовать ваш продукт бесплатно как можно дольше.
Я поделюсь своим опытом решения этой проблемы.
Капча
Все в интернете в том или ином виде сталкиваются с капчей каждый день. Я обычно использую Cloudflare Turnstile, это как гугловая рекапча, только от клаудфлейр.
Обычных пользователей она пропускает практически моментально, не заставляя их выбирать транспортные средства на картинках. Ботов она тоже пропускает, если они используют нормальный хромдрайвер. Тем не менее, значительная часть энтузиастов отвалится уже на этом этапе.
Я против использования любых механизмов защиты, которые усложняют жизнь потенциальным клиентам, поэтому не буду предлагать вводить капчу в виде искаженной строки или решать интегралы.
Емейлы
В своих проектах я использую регистрацию по емейлу, опционально добавляю логин через гугл / гитхаб.
Можно попытаться радикально решить проблему, оставив регистрацию только через социальные сети или по номеру телефона, но, на мой взгляд, это снизит конверсию и приведет к потере потенциальных клиентов (то же самое относится к введению белых списков почтовых доменов).
Кроме того, если ценность продукта, который вы предоставляете бесплатно, превышает стоимость приобретения учетки в соцсети или получения одноразового смс, то это не остановит злоумышленников.
Для регистрации аккаунтов у вас на сайте вредитель может использовать сервисы одноразовых емейлов. Доменов для приема таких писем десятки тысяч (без шуток, вот один из обновляемых списков).
Существует довольно много репозиториев со списками таких доменов и сервисов для проверки, является ли email одноразовым: 1, 2, 3, 4. Я использую 7c/fakefilter и даже периодически прошу добавить очередной сервис для сканирования. Как и с капчей, это отсеивает большинство нарушителей, но, к сожалению, таких сервисов становится все больше, и авторы списков не могут физически отследить все домены.
Также абьюзер может использовать аккаунты в почтовых сервисах вроде Gmail, где себестоимость регистрации одного такого почтового адреса колеблется в диапазоне $0–0,1. Здесь мы тоже бессильны.
IP-адреса
Самое простое, что можно сделать с IP, – установить рейтлимиты на чувствительные действия, такие как регистрация аккаунта.
Также можно использовать сервисы проверки IP, которые выдают подробную информацию об адресе, включая то, является ли IP-адрес известным публичным прокси или VPN-сервером. Эти данные можно просто собирать, а можно усложнять регистрацию с таких адресов. Я использую proxycheck и запрещаю регистрацию с адресов, у которых risk score >= 67, предлагая пользователю отключить VPN.
Это тоже не панацея, поскольку злоумышленник может использовать купленные ротирующиеся мобильные или резидентские прокси, которые применяются обычными пользователями.
Фингерпринты
Существуют библиотеки и сервисы, которые позволяют снимать отпечаток с браузера пользователя на основе сотен параметров (начиная с банальных, как юзерагент и таймзона, и заканчивая установленными шрифтами в ОС пользователя). Пример: FingerprintJS.
Все это, безусловно, круто и технологично, но, на мой субъективный взгляд, абсолютно бесполезно. Если пользователь уже обошел вашу reCAPTCHA или Turnstile, вероятно, он использует undetected-chromedriver или его аналог. В таком случае создается отдельная сессия, что приводит к уникальному отпечатку. Точно так же, как если бы вы создали новый профиль в Chrome.
Кстати, можете ради интереса проверить, насколько ваш отпечаток уникален по сравнению с другими: Am I Unique?
Человеческий фактор
Окей, представим, что нарушитель использовал трастовые IP и email адреса, прошел капчу и получил доступ к сервису. И проделал это сотни, тысячи, а возможно, и сотни тысяч раз.
В моем случае один из проектов — это API, и главная цель фри-триальщиков — получить API-ключ на 100 бесплатных запросов.
Самый распространенный сценарий: при регистрации злоумышленника трудно определить, но после того, как он начинает использовать ключ, все становится очевидным. Почему? Потому что он делает запросы с одного и того же серверного IP. 🤡
Простенький скрипт, который считает количество ключей, используемых с одного IP, и автоматически блокирует нарушителей, отсеял массу креативных пользователей.
Выводы
Всех не заблокируешь :)
Можно бесконечно разрабатывать новые способы защиты, но гораздо разумнее сосредоточить усилия на улучшении сервиса и продажах.
Если вы только запускаете свой SaaS, я бы на вашем месте ограничился добавлением капчи и блокировкой одноразовых email-адресов. А если ваш продукт не ориентирован на метрики, а фри-триалы больно бьют по бюджету, возможно, стоит отказаться от бесплатного периода в пользу недорогого тарифного плана.
Буду рад, если в комментариях вы поделитесь своим опытом. Наверняка, в клубе есть много людей с большим опытом в этом вопросе.
Меня немного коробит вот это "халявщики", "боремся с злоумышлениками" и "решение проблемы". Люди пользуются твоим сервисом в рамках установленных тобой же правил. Я понимаю, что идеальный кейс это когда человек приходит, тестит возможности и сразу покупает подписку а не запрягает ботов скрейпить форму регистрации. Но если ты сам дал возможность зарегистрировать бесконечное количество триалов на уникальную почту?..
Не лучше ли называть это не борьбой с злоумышленниками (они не делают ничего незаконного) а уточнить правила пользования сервисом. Не более 100 запросов с одного ip, никаких одноразовых карт, регистрация только по видеозвонку с менеджером а лучше вообще приходите в офис с 12 до 16 по четвергам с паспортом...
Спасибо за пост и полезные ссылки в нем!
Узнал много нового)
завязывали триалку на email (аккаунт) и/или номер карты (если карта была на триалке, то повторный бесплатный доступ не неё не давали, сразу списывали за подписку). способ неидеальный, но много халявщиков отсекал.
бонусом - скоринг транзакций (в тч и на создание триала), самые рисковые проверяли полуавтоматом и блокировали аккаунт/отменяли подписку.
А что с телегой? Что, если продукт - бот? Есть какие-то мысли по защите (идентификации пользователя без необходимости проверять документы/привязывать карту)?
Спасибо за пост, забрал пару сервисов полезных, которые всегда искал, но как-то руки не доходили.
Жаль, что фактически для мобильных приложений тут подходит только IP трекинг, чего конечно же не достаточно.
Буду кстати рад, если кто-то поделится подобными статьями или инфой защиты от ботов и тп.
Кстати, Гугл авторизация тоже не особо спасает - каким-то образом (я пока не осилил выяснить каким, видимо как-то через бизнес акки) они регают гугл акки на радномные темп домены и все. Но я не копал эту проблему, а просто весь побанил как-то)