Wiki
Безопасность

Rate limiting — что это простыми словами

Rate limiting — ограничение частоты запросов от одного клиента: 100 req/min с IP. Защита от bruteforce паролей, парсинга, DDoS, злоупотреблений API.

Rate limiting — механизм ограничения количества запросов, разрешённых клиенту за интервал времени. Пример: "максимум 5 попыток входа в минуту с одного IP" или "1000 API-запросов в час на токен". Отвечает 429 Too Many Requests при превышении + заголовки `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`.

Алгоритмы: (1) Fixed window — счётчик в Redis `INCR key EX 60`. Простой, но всплеск на границе (99 запросов в 59:59 + 99 в 60:01 = 198 за 2 сек). (2) Sliding window — считаем последние 60 сек. Точнее, чуть дороже. (3) Token bucket — ведро на N токенов, запрос тратит 1, регенерация K/сек. Разрешает burst. (4) Leaky bucket — очередь фиксированной скорости. Сглаживает.

Ключи ограничения: (1) IP — базово, но NAT школы = 500 учеников за 1 IP. (2) User-ID — при авторизации точнее. (3) API-key/token — для B2B. (4) Комбо — IP + endpoint (`/login` строже, чем `/health`).

Инструменты: (1) nginx `limit_req_zone` — L7 уровень, дёшево. (2) Cloudflare Rate Limiting — L4-7 на edge, до реального сервера не доходит. (3) API Gateway (Kong, Tyk) — сложные правила по route/user. (4) Приложение — `express-rate-limit`, `django-ratelimit`, `slowapi` (FastAPI), Redis-backed.

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

Что ставить на /login?
5 попыток в 15 минут per IP + per username (защита от distributed brute). После — CAPTCHA / временный блок аккаунта.
Как не заDDoS-нуть легитимных пользователей?
Allow-list office-IP, VIP-клиентов. Monitor 429-rate — если > 1 % трафика, лимит слишком жёсткий.

Смотрите также