Skip to content

feat(back): renforce les limites de débit du login par email#577

Draft
simonaszilinskas wants to merge 1 commit into
nextfrom
feat/auth-login-hardening
Draft

feat(back): renforce les limites de débit du login par email#577
simonaszilinskas wants to merge 1 commit into
nextfrom
feat/auth-login-hardening

Conversation

@simonaszilinskas

@simonaszilinskas simonaszilinskas commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Objectif

Combler trois trous dans le login par code email, sans jamais bloquer une classe de 600 élèves derrière une seule IP partagée. Chaque limite critique est donc indexée sur l'email (propre à chaque élève), pas sur l'IP seule.

Ce qui était fragile

  • /auth/email/verify n'avait aucune limite : le code à 6 chiffres (valable 10 min) pouvait être bruteforcé sans fin.
  • /auth/email/request n'était limité que par IP, donc bombardable en tournant les IP.
  • La limite par IP de 15/h bloquait une classe de 600 élèves dès le 16e.

Ce que fait la PR

  • Vérification limitée à 5 tentatives par (IP, email), puis 429. Une nouvelle demande de code remet le compteur à zéro.
  • Demande de code plafonnée à 5/h par email, en plus de la limite par IP.
  • Limite par IP relevée à 2000/h, configurable.

Trois réglages env avec valeurs par défaut : AUTH_EMAIL_REQUEST_PER_IP_PER_HOUR (2000), AUTH_EMAIL_REQUEST_PER_EMAIL_PER_HOUR (5), AUTH_VERIFY_MAX_ATTEMPTS (5). Les compteurs sont dans Redis et fail-open comme le reste du fichier. Tests dans tests/arena/test_auth_ratelimit.py.

Trois protections sur le flux de connexion par code email, pensées pour ne
jamais bloquer une classe de 600 eleves derriere une IP partagee (chaque
limite critique est indexee sur l'email, pas sur l'IP seule).

- limite les tentatives de verification d'un code a 5 par (IP, email) : ferme
  le bruteforce d'un code a 6 chiffres qui n'etait pas limite, sans permettre
  a un tiers de bloquer la connexion d'une victime (le compteur est scope a
  l'IP, le code n'est jamais invalide a distance)
- ajoute un plafond par email sur les demandes de code (5/h) contre le
  bombardement de la boite d'une victime via rotation d'IP
- releve le plafond par IP a 2000/h (configurable) pour ne pas bloquer les
  etablissements derriere un NAT partage
- une nouvelle demande de code remet le compteur de tentatives a zero
- tests unitaires des limites, dont l'absence de DoS inter-IP
@simonaszilinskas simonaszilinskas force-pushed the feat/auth-login-hardening branch from 4ecfb06 to d9dfb62 Compare July 9, 2026 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant