Ваш Rate Limiter — это не средство защиты
Бот выкачал все данные по одному паспорту из моего API за считанные минуты.
Мой rate limiter не смог его остановить.
Лимит составлял 3 000 вызовов в месяц. Полное сканирование одного паспорта занимает всего 195 вызовов. Бот не превысил лимит и украл всё.
Rate limiting защищает ваши расходы на инфраструктуру. Он не защищает ваши данные.
Если вы смешаете эти два понятия, произойдет утечка данных.
Rate limiter задает только один вопрос: «Не обходится ли мне этот клиент слишком дорого прямо сейчас?»
Скрейперы намеренно не пересекают эту черту. Мой скрейпер работал со скоростью 25 запросов в минуту. Это ничтожная нагрузка. Ему потребовалось бы всего 40 000 вызовов, чтобы скопировать весь мой набор данных. Если хакер использует множество бесплатных аккаунтов, никакое ограничение по объему его не поймает.
Перестаньте смотреть на объем. Смотрите на личность, охват и паттерны.
Я совершил две ошибки. Во-первых, я не логировал исходный IP-адрес. Хакер мог просто зарегистрироваться заново бесплатно.
Сначала исправьте логи. Добавьте столбцы IP и страны в вашу базу данных. Используйте реальный IP клиента от Cloudflare вместо удаленного адреса (remote address). Это позволит вам блокировать злоумышленников на сетевом уровне.
Во-вторых, измените свои лимиты.
Не ограничивайте только количество запросов в месяц. Ограничьте количество различных направлений, которые один паспорт может проверить за день. Реальный пользователь проверяет несколько направлений. Скрейпер пытается проверить их все.
Массовый сбор данных имеет специфическую сигнатуру:
- Высокая плотность запросов.
- Последовательность.
- Полный охват данных для одного источника.
Вы можете обнаружить этот паттерн, используя скользящее окно активности (sliding window). Если один паспорт обращается к слишком большому количеству направлений за короткое время, пометьте его. Ограничьте скорость (throttle) этого ключа или немедленно заблокируйте его.
Теперь вы реагируете на поведение, а не просто считаете цифры.
Разделите свою стратегию на две задачи:
- Rate Limiter: Защита ваших денег. Используйте лимиты объема для каждого ключа.
- Extraction Defense: Защита ваших данных. Используйте параметры личности, охвата и ритмичности.
Если у вас есть только rate limiter, у вас есть лишь предохранитель для биллинга. Но у вас нет безопасности.
Источник: https://dev.to/mathis_higuinen_6db9b244c/your-rate-limiter-is-not-a-security-control-4b3f
