Pular para o conteúdo principal

Limitation des requêtes

Cette page décrit les limites réellement actives contre les abus : force brute sur la connexion, envois massifs de liens, coût de l'assistant.

Ce qui est actif​

ProtectionLimiteCléOù
Verrouillage de compte5 échecs de connexion, puis compte verrouillé 30 minutescompteLoginSecurityService
Lien magique de connexion3 demandes par tranche de 5 minutescompteMagicLinkService ; réponse 429
Assistant Bemba (application)40 questions par tranche glissante de 10 minutesutilisateurlimiteur assistant ; réponse 429
Assistant du site public20 questions par tranche de 10 minutes, et 500 par jour au totaladresse IP, puis globallimiteurs assistant_public et assistant_public_global

Les compteurs des limiteurs sont stockés dans le cache applicatif : Redis en production, le système de fichiers ailleurs. Les tentatives de connexion sont enregistrées en base (adresse IP, navigateur, motif d'échec) et une connexion depuis une adresse jamais vue est signalée.

Configuration : backend/config/packages/rate_limiter.yaml.

Ce qui n'est pas actif​

Le fichier de configuration déclare aussi, pour la production, des limiteurs par adresse IP sur l'ensemble de l'API (login, authentication, api_global, api_write, password_reset, export). Le code qui les applique, RateLimitingSubscriber, est exclu des services dans backend/config/services.yaml : ces limites ne s'appliquent donc pas. Ni Traefik ni Nginx n'ajoutent de limite de débit.

Avant de l'activer

Les paquets nécessaires sont installés. Activer le subscriber consiste à retirer son exclusion dans services.yaml. Deux points à vérifier d'abord : la limite globale (100 requêtes par minute et par IP) est basse pour une équipe entière derrière une même adresse de bureau, et l'adresse vue par Symfony doit être celle du client et non celle de Traefik (trusted_proxies).

Débloquer un compte​

Le verrou tombe seul après 30 minutes. Pour lever le verrou plus tôt, un administrateur appelle POST /api/users/{id}/unlock (l'interface n'a pas de bouton dédié à ce jour), ou réinitialise le mot de passe avec app:reset-user-password, qui lève aussi le verrou. Une connexion réussie remet le compteur d'échecs à zéro.

Réponse 429​

Les limiteurs de l'assistant répondent 429 Too Many Requests avec un message lisible. L'interface l'affiche tel quel ; il suffit d'attendre la fin de la fenêtre.