# Walk The Line — V16.9.2 — Sécurisation de la connexion

## Ajouts

- Protection adaptative de `/login` contre les tentatives répétées.
- Après 3 échecs récents (IP ou identifiant), reCAPTCHA v3 devient obligatoire si le projet dispose d'un reCAPTCHA activé et complètement configuré.
- Après 5 échecs récents depuis une même IP, blocage temporaire de 15 minutes.
- En cas de nouvelle série menant à un blocage dans les 24 h, blocage porté à 1 heure.
- Aucun bannissement permanent automatique.
- Une connexion réussie remet à zéro les compteurs associés à l'IP et à l'utilisateur.
- Les clés de cache utilisent uniquement des condensats SHA-256 : l'adresse IP et l'identifiant en clair ne sont pas stockés par ce mécanisme.

## Adresse IP réelle derrière un reverse proxy

La protection s'appuie sur `Request::getClientIp()`. Si Apache reverse-proxy l'application vers Docker/PHP, Symfony doit faire confiance UNIQUEMENT au proxy Apache afin de prendre en compte `X-Forwarded-For`.

Exemple d'environnement du conteneur/app :

    SYMFONY_TRUSTED_PROXIES=127.0.0.1,::1

Si le proxy est sur une autre machine, remplacer ces valeurs par son IP/CIDR réel. Ne jamais faire confiance à tous les proxies (`0.0.0.0/0`).

Le proxy Apache doit préserver le host et transmettre le protocole HTTPS :

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"

`mod_proxy_http` ajoute normalement `X-Forwarded-For` automatiquement.

## Correctif super-admin — liste des IP bloquées

Ajout de la page **Paramétrage > Sécurité connexion**, réservée au super-administrateur :

- liste des adresses IP actuellement bloquées ;
- date/heure de fin du blocage ;
- temps restant ;
- indicateur de récidive ;
- bouton **Débloquer** protégé par CSRF.

Les IP ne sont enregistrées dans le registre d'administration que lorsqu'un blocage effectif est déclenché, et uniquement dans le cache Symfony. Les entrées expirées sont purgées automatiquement lors de l'affichage de la page. Aucune migration SQL n'est nécessaire.
