À quoi sert le TrustProxies ?
Vous le voyez régulièrement dans divers tutoriels traitant des middlewares, mais savez-vous réellement ce que fait le middleware TrustProxies ?
Essayons dans cet article de mieux comprendre l'importance de ce middleware et de voir dans quelles situations il est nécessaire de le configurer.
Pour commencer, imaginons que le blog laravel-france.com soit simplement hébergé sur un seul serveur accessible depuis internet :
Depuis cette application, nous pouvons récupérer l'adresse IP de l'utilisateur directement depuis le helper request :
1Route::get('/', function () {2 return request()->ip(); // 92.145.202.103});
Cette IP est la bonne et correspond à celle de notre utilisateur, mais imaginons désormais que laravel-france.com soit hébergé sur une infrastructure plus complexes, à travers plusieurs serveurs accessibles depuis un load balancer :
Dans cette configuration, quand une requête arrive, le load balancer décide vers quel serveur la rediriger, permettant de mieux distribuer la charge entre les différents serveurs.
Désormais, quand nous cherchons à récupérer l'adresse IP de l'utilisateur, nous obtiendrons l'adresse IP ... du load balancer, et non celle de l'utilisateur !
1Route::get('/', function () {2 return request()->ip(); // 10.114.0.53});
Dans notre cas, cette dernière est d'ailleurs l'IP privée du load balancer !
Ce comportement, bien que gênant, est totalement normal et est dû au fait que le load balancer est un intermediaire entre l'utilisateur et les serveurs qui modifie l'adresse IP de la requête.
C'est pour répondre à cette contrainte que le middleware TrustProxies intervient.
Afin de récupérer la véritable adresse IP de l'utilisateur, il est nécessaire de préciser au middleware, depuis le fichier bootstrap/app.php, que notre load balancer est un intermédiaire de confiance devant transmettre l'IP à l'origine de la connexion :
1return Application::configure(basePath: dirname(__DIR__)) 2 ->withRouting( 3 web: __DIR__.'/../routes/web.php', 4 commands: __DIR__.'/../routes/console.php', 5 health: '/up', 6 ) 7 ->withMiddleware(function (Middleware $middleware) { 8 $middleware->trustProxies(at: [ 9 '10.114.0.5', 10 ]); 11 })12 ->withExceptions(function (Exceptions $exceptions) {13 //14 })->create();
Avec cette configuration, Laravel récupérera l'adresse IP d'origine de l'utilisateur, celle qui a véritablement initié la requête vers le load balancer !
Cette configuration est essentielle, car en présence d'un load balancer, d'un proxy ou de tout autre mécanisme modifiant l'origine de la requête, Laravel pourrait également rencontrer des difficultés à générer des liens et à identifier le protocole utilisé pour la connexion (HTTP, HTTPS).
Attention, le bon fonctionnement du TrustProxies exige également que le load balancer soit correctement configuré pour faire transiter cette information, mais cela n'est plus de la responsabilité directe de votre application
Vous en savez désormais un peu plus sur l'importance de ce middleware et à quelles problématiques il répond !
Écrit par
Mathieu De GraciaLead & Software Architect • nublar.dev
Tu veux commenter ? Crée un compte ou connecte-toi.
A lire
Autres articles de la même catégorie
Notifier ses utilisateurs via les websockets
Dans ce tutoriel, on va s'appuyer sur un outil puissant de Laravel pour notifier facilement nos utilisateurs via websocket.
Créer votre assistant ChatGPT
Découvrez comment créer et communiquer avec votre propre assistant ChatGPT directement depuis Laravel !
Découverte FilamentPHP : Installation & première page
Premier article de cette série de tutoriels, découvrons les bases de FilamentPHP en créant un listing des utilisateurs !