N’oubliez pas TRUSTED_HEADERS dans Symfony

Petit article pour vous dire qu’il ne faut pas oublier de mettre la valeur de TRUSTED_HEADERS dans la configuration de Symfony.

J’ai un site qui utilise Varnish comme proxy. Mon problème est que certaines URLs apparaissent en HTTP sur le site, alors que sur mon environnement local, toutes les requêtes sont bien déclarés en HTTPS. Comme j’utilise Varnish, il envoie les requêtes vers mon application Symfony en utilisant le protocole HTTP. C’est pourquoi Symfony génère des requêtes qui utilisent le protocole HTTP.

Pour corriger le problème j’ai donc défini la variable de TRUSTED_PROXIES, sur l’adresse du serveur Varnish. Cependant cela n’a pas corrigé le soucis. Pourtant ma configuration me semblait bonne.
C’est l’occasion pour moi de fouiller un peu dans le code de Symfony. En cherchant Request::setTrustedProxies, je suis tombé sur le code suivant dans le kernel de Symfony :

if ($container->hasParameter('kernel.trusted_proxies') && $container->hasParameter('kernel.trusted_headers') && $trustedProxies = $container->getParameter('kernel.trusted_proxies')) {
    Request::setTrustedProxies(\is_array($trustedProxies) ? $trustedProxies : array_map('trim', explode(',', $trustedProxies)), $container->getParameter('kernel.trusted_headers'));
}

Si on regarde la condition, il faut que le paramètre kernel.trusted_headers soit défini, sinon la configuration n’est pas appliqué. Pas même le TRUSTED_PROXY.

J’ai alors compris que j’avais oublié de définir ce paramètre. Je pensais que c’était facultatif, mais en relisant la documentation de Symfony sur setTrustedProxies, je me suis rendu compte qu’il y avait bien écrit : ”you need to tell Symfony which [..] to trust and what headers”.

Du coup n’oubliez pas de bien définir ces deux paramètres (et d’adapter les headers en fonction du proxy : ici Varnish utilise X-Forwaded-For)

framework:
    trusted_proxies: '%env(TRUSTED_PROXIES)%'
    trusted_headers: ['x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-forwarded-port', 'x-forwarded-prefix']

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *