Rate limiting (ограничение частоты)
Ограничение числа запросов от клиента за период — защита от перебора и DoS.
Сигнатура
Rate limitingRate limiting ограничивает, сколько запросов может сделать клиент за единицу времени. Это снижает эффективность brute-force, защищает от злоупотреблений API и смягчает простые DoS-атаки.
Как применять: ограничивайте по IP и/или по аккаунту, особенно на чувствительных эндпоинтах (логин, восстановление пароля), возвращайте код 429 Too Many Requests, используйте готовые библиотеки и общий счётчик (например в Redis).
import time
from collections import defaultdict
hits = defaultdict(list)
def allow(ip, limit=10, window=60):
now = time.time()
hits[ip] = [t for t in hits[ip] if now - t < window]
if len(hits[ip]) >= limit:
return False # вернуть 429
hits[ip].append(now)
return True