Ваш Rate Limiter — це не засіб безпеки

Бот викачав усі дані для одного паспорта з мого API за лічені хвилини.

Мій rate limiter не зупинив його.

Ліміт становив 3 000 викликів на місяць. Повне сканування одного паспорта потребує лише 195 викликів. Бот не перевищив ліміт і вкрав усе.

Rate limiting захищає ваші витрати на інфраструктуру. Він не захищає ваші дані.

Якщо ви змішаєте ці два поняття, ви допустите витік даних.

Rate limiters ставлять лише одне питання: «Чи занадто дорого цей клієнт обходиться мені прямо зараз?»

Скрейпери навмисно тримаються нижче цієї межі. Мій скрейпер працював зі швидкістю 25 запитів на хвилину. Це мізерне навантаження. Йому знадобиться лише 40 000 викликів, щоб скопіювати весь мій набір даних. Якщо хакер використовує багато безкоштовних акаунтів, жодне обмеження обсягу його не зупинить.

Припиніть дивитися на обсяг. Дивіться на ідентифікацію, охоплення та закономірності.

Я припустився двох помилок. По-перше, я не логував IP-адресу джерела. Хакер міг просто зареєструватися знову безкоштовно.

Спочатку виправте свої логи. Додайте колонки IP та країни до вашої бази даних. Використовуйте реальну IP-адресу клієнта від Cloudflare замість remote address. Це дозволить вам блокувати зловмисників на мережевому рівні.

По-друге, змініть свої ліміти.

Не обмежуйте лише кількість запитів на місяць. Обмежуйте кількість різних пунктів призначення, які один паспорт може перевірити за день. Реальний користувач перевіряє кілька пунктів. Скрейпер намагається перевірити їх усі.

Масовий збір даних має специфічну сигнатуру:

  • Він щільний.
  • Він послідовний.
  • Він охоплює все для одного джерела.

Ви можете виявити цю закономірність, аналізуючи «ковзне вікно» активності. Якщо один паспорт звертається до занадто великої кількості пунктів призначення за короткий проміжок часу, позначте його. Обмежте швидкість цього ключа або негайно заблокуйте його.

Тепер ви реагуєте на поведінку, а не просто рахуєте цифри.

Розділіть свою стратегію на два завдання:

  1. Rate Limiter: Захищайте свої гроші. Використовуйте обмеження обсягу для кожного ключа.
  2. Extraction Defense: Захищайте свої дані. Використовуйте ідентифікацію, охоплення та ритмічність.

Якщо у вас є лише rate limiter, у вас є лише запобіжник для білінгу. У вас немає безпеки.

Джерело: https://dev.to/mathis_higuinen_6db9b244c/your-rate-limiter-is-not-a-security-control-4b3f