Защита API и личного кабинета от ботов
Личный кабинет и API — то, что боты атакуют тише всего и дольше всего. Подбор паролей по утёкшим базам, проверка, зарегистрирован ли номер, выкачивание данных через API. Разбираем главные атаки и защиту от них.
Содержание
Коротко
- Credential stuffing идёт медленно и с тысяч адресов — одних лимитов по IP мало.
- Одинаковые ответы на ошибки входа и восстановления не дают собрать базу ваших клиентов.
- CORS и ключ в коде страницы не защищают API от ботов.
Главные атаки
- Credential stuffing — вход по парам «логин — пароль» из утечек других сайтов. Многие люди используют один пароль везде, поэтому часть попыток удаётся.
- Перебор паролей к одному аккаунту — проще остановить, но всё ещё встречается.
- Проверка существования аккаунтов — по разным ответам на «неверный пароль» и «пользователь не найден» бот узнаёт, кто у вас зарегистрирован.
- Злоупотребление восстановлением пароля — рассылка писем и СМС, бомбинг через ваш сайт.
- Выкачивание данных через API — каталог, цены, профили, если API отдаёт больше, чем нужно.
Защита входа
- Лимиты по аккаунту и адресу
Не больше нескольких неудачных попыток в минуту на аккаунт и на адрес, с растущей паузой после серии ошибок.
- Проверка утёкших паролей
При регистрации и смене пароля сверяйте пароль с базами утечек и не принимайте скомпрометированные.
- Двухфакторный вход
Обязательно для администраторов и как опция — для клиентов.
- Проверка браузера перед входом
Скрипты и автоматизированные браузеры не дойдут до формы входа, люди ничего не заметят.
- Оповещения о входах
Письмо о входе с нового устройства помогает клиентам быстро заметить чужой вход.
Одинаковые ответы
На ошибку входа, восстановление пароля и регистрацию отвечайте одинаково, независимо от того, есть ли такой пользователь: «Если аккаунт существует, мы отправили письмо». Иначе бот за минуты соберёт список ваших клиентов по базе номеров или почт.
Защита API
| Мера | Что даёт |
|---|---|
| Лимиты на ключ, пользователя и адрес | Нельзя выкачать всё за минуту, перебор становится медленным |
| Авторизация на всех методах с данными | Открытые методы — первое, что находят парсеры |
| Только нужные поля в ответе | Меньше утечёт, если API всё-таки выкачают |
| Пагинация с ограничением | Нельзя запросить миллион записей одним запросом |
| Журнал и оповещения | Видно всплески ошибок авторизации и необычные объёмы |
CORS не защищает API от ботов: он ограничивает только браузеры, а скрипт отправит запрос напрямую. Ключ API в коде страницы тоже не секрет — его видит любой.
Генератор лимитов для nginxСоберите лимиты для входа и API — запросы сверх лимита получат код 429 до того, как дойдут до приложения.ОткрытьПроверка браузера для входа
Лимиты хорошо работают против грубого перебора, но credential stuffing идёт медленно и с тысяч адресов. Против него помогает проверка браузера перед входом: боты на скриптах и в автоматизированных браузерах её не проходят, а человек ничего не замечает. На сервере результат проверки можно запросить по токену, как в проверке заявок nbots.
Частые вопросы
Что такое credential stuffing?
Автоматический вход на сайт по парам логин — пароль из утечек других сайтов. Атака использует то, что люди повторяют пароли, поэтому её не остановить одной блокировкой по адресу.
Нужна ли двухфакторная аутентификация обычному сайту?
Для администраторов — обязательно. Для клиентов — желательно как опция, а для аккаунтов с деньгами, бонусами или личными данными — включать по умолчанию.
Как защитить восстановление пароля от бомбинга?
Ограничьте число писем и СМС на аккаунт, номер и адрес, добавьте паузу между повторными отправками и проверку браузера перед отправкой кода.
Что такое rate limiting?
Ограничение числа запросов за единицу времени — на адрес, пользователя или ключ API. Сверх лимита сервер отвечает ошибкой 429 и не выполняет запрос.
Как понять, что идёт credential stuffing?
По всплеску неудачных входов по многим разным аккаунтам с разных адресов и по входам, которые удаются с первой попытки с новых устройств.
Нужна ли капча на входе?
Всем — нет. Показывайте её после нескольких неудачных попыток или подозрительным посетителям.
Как защитить мобильное приложение и его API?
Лимиты и авторизация на сервере, короткоживущие токены, проверка подлинности приложения средствами платформы и мониторинг аномалий. Ключ в приложении всегда можно извлечь.