Skip to content

REL-5: Rate limiting #91

Description

@ii-reviewer

Цель: защитить логин от брутфорса и write-эндпоинты от злоупотреблений, не мешая нормальному трафику.
Зависимость: #10.

Что сделать

  • Лимитировать POST /api/auth/login (per username + per IP) и write-эндпоинты движений per user/IP.
  • Bucket4j поверх Redis (распределённый счётчик — лимит общий для всех инстансов приложения, не per-JVM).
  • При превышении — 429 Too Many Requests + заголовок Retry-After.
  • Ключи и лимиты вынести в конфиг (попыток/окно), разные для login и write.
  • Login-лимит — главная защита: считать неуспешные попытки, не блокировать после успешного входа здоровый трафик.
  • Стретч: sliding window вместо грубых фиксированных окон; счётчик в Redis атомарный (без гонок при параллельных запросах); не штрафовать обычного пользователя за всплеск.

Acceptance criteria

  • N+1-я попытка логина в окне → 429 + Retry-After.
  • Лимит действует на оба инстанса при горизонтальном масштабировании (общий счётчик в Redis).
  • Превышение на write-эндпоинте → 429, бизнес-операция не выполняется.
  • Обычный пользователь в пределах лимита не получает 429.
  • Лимиты конфигурируемы; есть тесты на срабатывание и сброс окна.

Metadata

Metadata

Assignees

No one assigned

    Labels

    performanceПроизводительностьsecurityБезопасность, защита эндпоинтов

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions