Cloudflare, DDoS и инфраструктура

Защита API и личного кабинета от ботов

Личный кабинет и API — то, что боты атакуют тише всего и дольше всего. Подбор паролей по утёкшим базам, проверка, зарегистрирован ли номер, выкачивание данных через API. Разбираем главные атаки и защиту от них.

Обновлено 11 ноября 20263 мин чтенияКоманда nbots

Содержание
  1. Главные атаки
  2. Защита входа
  3. Одинаковые ответы
  4. Защита API
  5. Проверка браузера для входа
  6. Частые вопросы

Коротко

  • Credential stuffing идёт медленно и с тысяч адресов — одних лимитов по IP мало.
  • Одинаковые ответы на ошибки входа и восстановления не дают собрать базу ваших клиентов.
  • CORS и ключ в коде страницы не защищают API от ботов.

Главные атаки

  • Credential stuffing — вход по парам «логин — пароль» из утечек других сайтов. Многие люди используют один пароль везде, поэтому часть попыток удаётся.
  • Перебор паролей к одному аккаунту — проще остановить, но всё ещё встречается.
  • Проверка существования аккаунтов — по разным ответам на «неверный пароль» и «пользователь не найден» бот узнаёт, кто у вас зарегистрирован.
  • Злоупотребление восстановлением пароля — рассылка писем и СМС, бомбинг через ваш сайт.
  • Выкачивание данных через API — каталог, цены, профили, если API отдаёт больше, чем нужно.

Защита входа

  1. Лимиты по аккаунту и адресу

    Не больше нескольких неудачных попыток в минуту на аккаунт и на адрес, с растущей паузой после серии ошибок.

  2. Проверка утёкших паролей

    При регистрации и смене пароля сверяйте пароль с базами утечек и не принимайте скомпрометированные.

  3. Двухфакторный вход

    Обязательно для администраторов и как опция — для клиентов.

  4. Проверка браузера перед входом

    Скрипты и автоматизированные браузеры не дойдут до формы входа, люди ничего не заметят.

  5. Оповещения о входах

    Письмо о входе с нового устройства помогает клиентам быстро заметить чужой вход.

Одинаковые ответы

На ошибку входа, восстановление пароля и регистрацию отвечайте одинаково, независимо от того, есть ли такой пользователь: «Если аккаунт существует, мы отправили письмо». Иначе бот за минуты соберёт список ваших клиентов по базе номеров или почт.

Защита API

МераЧто даёт
Лимиты на ключ, пользователя и адресНельзя выкачать всё за минуту, перебор становится медленным
Авторизация на всех методах с даннымиОткрытые методы — первое, что находят парсеры
Только нужные поля в ответеМеньше утечёт, если API всё-таки выкачают
Пагинация с ограничениемНельзя запросить миллион записей одним запросом
Журнал и оповещенияВидно всплески ошибок авторизации и необычные объёмы

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

Генератор лимитов для nginxСоберите лимиты для входа и API — запросы сверх лимита получат код 429 до того, как дойдут до приложения.Открыть

Проверка браузера для входа

Лимиты хорошо работают против грубого перебора, но credential stuffing идёт медленно и с тысяч адресов. Против него помогает проверка браузера перед входом: боты на скриптах и в автоматизированных браузерах её не проходят, а человек ничего не замечает. На сервере результат проверки можно запросить по токену, как в проверке заявок nbots.

Частые вопросы

Что такое credential stuffing?

Автоматический вход на сайт по парам логин — пароль из утечек других сайтов. Атака использует то, что люди повторяют пароли, поэтому её не остановить одной блокировкой по адресу.

Нужна ли двухфакторная аутентификация обычному сайту?

Для администраторов — обязательно. Для клиентов — желательно как опция, а для аккаунтов с деньгами, бонусами или личными данными — включать по умолчанию.

Как защитить восстановление пароля от бомбинга?

Ограничьте число писем и СМС на аккаунт, номер и адрес, добавьте паузу между повторными отправками и проверку браузера перед отправкой кода.

Что такое rate limiting?

Ограничение числа запросов за единицу времени — на адрес, пользователя или ключ API. Сверх лимита сервер отвечает ошибкой 429 и не выполняет запрос.

Как понять, что идёт credential stuffing?

По всплеску неудачных входов по многим разным аккаунтам с разных адресов и по входам, которые удаются с первой попытки с новых устройств.

Нужна ли капча на входе?

Всем — нет. Показывайте её после нескольких неудачных попыток или подозрительным посетителям.

Как защитить мобильное приложение и его API?

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

Читайте также