Depuis 1998

Panneau débogueur F12 de Firefox : l’agaçante requête HTTP post-flight

WISIWYG ou WYSIWYWYG ? Telle est la question !
Ce que vous voyez est ce que vous obtenez ? Ou ce que vous voyez est ce que vous auriez aimé obtenir ?

Dans cet article, je vais vous montrer la curieuse façon dont Firefox v70 présente le code source dans son panneau débogueur, vous expliquer les dangers de cette méthode, et comment la contourner, du moment que vous avez la main sur le site que vous observez.

Le point de départ

Vous êtes dûment connecté dans un espace de travail, et vous voulez examiner le code source de cette page.
Vous appuyez simplement sur F12, comme le ferait n’importe quel développeur web junior pour commencer…

Vous êtes loggué(e), mais vous voyez le code source de l'écran de login.

Le problème

Le code source affiché dans le panneau de débogage ne correspond pas

Eh bien, dans l’exemple ci-dessus, en jetant un rapide coup d’œil au code source, un indice montre que Mozilla Firefox affiche un code source qui ne correspond pas à la page rendue à l’écran.

Vous le voyez ? Sinon, regardez l’image ci-dessous, et repérez la définition de la classe #table_login.

voir la classe CSS #table_login

L’élément title, ainsi que la présence de la classe table_login, laissent penser qu’il s’agit du code de l’écran de connexion !

Alors que vous êtes loggé(e), le panneau de debug vous montrera plutôt ce qui ressemblerait bien à un écran de login !

Interprétation

  1. Firefox envoie une toute nouvelle requête HTTP au serveur web chaque fois que vous ouvrez le panneau débogueur de la console (F12, onglet Débogueur). J’appellerai désormais cette requête une requête post-flight, en souvenir de la fameuse requête pre-flight de CORS…
  2. Cette toute nouvelle requête HTTP a des en-têtes modifiés ; elle a une signature bien particulière,
    il lui manque HTTP_COOKIE, et elle élargit HTTP_ACCEPT à étoile slash étoile
    Le filtre passe-tout de HTTP_ACCEPT rend possible l'astuce.
  3. Le site que vous observez, le vôtre espérons-le, attend un HTTP_COOKIE valide (qui peut aussi porter une session HTTP valide) pour vous authentifier à partir d’une connexion précédente valide, mais n’en trouve aucun, et renvoie donc l’écran de connexion, réponse valide et attendue à cette requête anonyme ; anonyme au sens de _non authentifiée_.
La variable serveur HTTP_COOKIE est absente.

Mon grain de sel

Mais pourquoi diable Firefox n’affiche-t-il pas tout simplement, joliment formaté, le code HTML initial reçu en réponse à sa requête HTTP d’origine ? Après tout, on peut raisonnablement supposer qu’il l’a stocké quelque part, non ? Alors pourquoi envoyer une toute nouvelle requête HTTP, avec ces en-têtes modifiés, au risque d’une interprétation différente par l’application web derrière…

Une solution de contournement

Dans le cas présenté ici, il se trouve que j’ai écrit le framework moi-même. Je me suis assuré que chaque page PHP appelle très tôt un authentificateur au nom explicite, « kickOutUnlessPrivileged() ». Pour contourner ce comportement agaçant, il m’a suffi d’ajouter une exception, basée sur un test d’absence de HTTP_COOKIE et un test sur la valeur de HTTP_ACCEPT, comme le montre le code ci-dessous.

Ce bout de code permet de contourner le problème.

Vérification

Un simple F5, suivi d’un coup d’œil au nouveau code dans la console, montre que le contournement proposé plus haut est efficace. Évidemment, chaque cas est différent, et ce sera à vous de trouver le contournement le plus simple, le plus robuste et le moins invasif pour votre propre cas.

Enfin ! Le code source reflète le rendu affiché dans le navigateur !

Conclusion

En développeur web désormais averti, gardez à l’esprit que Firefox (du moins ce user-agent) envoie une requête post-flight : une toute nouvelle requête HTTP, subtilement modifiée mais lourde de conséquences, chaque fois que vous rechargez le panneau débogueur de la console.
Si vous avez la chance d’être propriétaire du site que vous observez, ou les droits suffisants pour le modifier, vous pouvez intercepter cette exception et utiliser le bon code pour valider votre authentification, par exemple en lisant et en exploitant la variable serveur HTTP_COOKIE (une interprétation de l’en-tête Cookie envoyé dans la requête HTTP).

(6451 vues)
créé le dimanche 17 novembre 2019
révisé le lundi 26 octobre 2026 par
Accepteriez-vous notre politique de confidentialité ? Elle parle de cookies et de données personnelles...