← HTTP — sécurité avancée, 40 leçons de cours

Module 7 / 40 · 90 min

07. Délimitation et encodage de transfert

Éviter des interprétations contradictoires entre parseurs.

Lessons, exercises and questions in this path are in French. The interface follows the site language.

Your progress will appear here when JavaScript is active.

Progress and best score are stored only in this browser. No account is needed; clearing browser data removes them. Module times are estimates including exercises.

Comprendre le mécanisme

En HTTP/1.1, les règles de délimitation permettent de savoir où se termine un corps sur une connexion. Transfer-Encoding et Content-Length ont des rôles distincts et des combinaisons peuvent être dangereuses. La compression d’une représentation décrite par Content-Encoding est encore une autre notion. Il faut lire la règle normative du protocole utilisé plutôt que compter sur une heuristique maison.

Raisonner et vérifier

Deux parseurs en chaîne doivent refuser ou normaliser de façon compatible les messages ambigus. Une validation seulement dans le contrôleur peut arriver trop tard si l’intermédiaire a déjà découpé la connexion autrement. Maintenez les serveurs et bibliothèques, vérifiez les règles des proxys et mesurez leur comportement sur une chaîne isolée. Documentez également la traduction entre versions HTTP.

Contenu et transfert

Transfer-Encoding et Content-Encoding ont des rôles distincts. Compression du contenu et délimitation du transfert ne se confondent pas. Content-Encoding décrit un codage de représentation tel que gzip. Transfer-Encoding en HTTP/1.1 intervient dans le transfert et sa délimitation ; les deux champs ne répondent pas à la même question.

Understand this common mistake

gzip et chunked représentent toujours la même transformation.

Compression du contenu et délimitation du transfert ne se confondent pas.

Parseurs en désaccord

Des parseurs incohérents créent une frontière dangereuse. La désynchronisation exploite précisément des divergences. Si un frontal et un backend ne placent pas la fin du message au même endroit, les octets restants peuvent être interprétés différemment. Le risque se situe dans leur composition, pas seulement dans le contrôleur.

Understand this common mistake

Deux parseurs interprètent nécessairement toute ambiguïté pareil.

La désynchronisation exploite précisément des divergences.

Chaque saut

La délimitation doit être non ambiguë sur chaque saut. Les messages successifs doivent être séparés selon le protocole. Une connexion peut être terminée puis reconstruite par un proxy. Vérifiez la délimitation et les règles de rejet à chaque saut au lieu de supposer qu’un parsing navigateur correct impose celui du backend.

Understand this common mistake

Un backend peut deviner librement la fin du message.

Les messages successifs doivent être séparés selon le protocole.

Conversion de version

Une conversion de version demande une politique correcte. La traduction vers un backend peut conserver des risques. Un frontal HTTP/2 peut émettre une requête HTTP/1.1 vers l’origine. Cette traduction doit conserver une délimitation cohérente et retirer ou refuser les champs incompatibles selon le protocole cible.

Understand this common mistake

Passer par HTTP/2 élimine toute erreur de conversion.

La traduction vers un backend peut conserver des risques.

Longueurs contradictoires

Les champs de longueur contradictoires demandent un traitement strict. Ce n’est pas un mécanisme de choix de taille. Une politique stricte doit éviter les interprétations ambiguës de longueurs et champs de transfert. Appliquez les règles du protocole dans les intermédiaires et vérifiez le refus dans un laboratoire représentatif.

Understand this common mistake

Des longueurs contradictoires sont une technique de négociation.

Ce n’est pas un mécanisme de choix de taille.

Environnement isolé

Les tests de parseur appartiennent à un laboratoire isolé. Ces essais peuvent perturber des requêtes tierces. Les tests de frontières de messages peuvent perturber des connexions mutualisées. Utilisez une chaîne dédiée avec données factices, sans utilisateurs tiers, et conservez versions et configuration exactes.

Understand this common mistake

Une cible partagée convient aux essais de désynchronisation sans accord.

Ces essais peuvent perturber des requêtes tierces.

Corps par morceaux

Les budgets s’appliquent aussi aux corps transmis par morceaux. Le mode de transfert ne supprime pas les limites de ressources. Un transfert chunked ne rend pas le corps sans limite. Comptez les octets reçus et appliquez temps, taille et ressources pendant lecture, y compris lorsque la taille totale n’est pas annoncée initialement.

Understand this common mistake

Un transfert chunked autorise un corps infini.

Le mode de transfert ne supprime pas les limites de ressources.

Avant le framework

Le framework ne contrôle pas tous les parseurs amont. Les composants et leurs versions doivent être examinés séparément. Une vérification PHP arrive après le parsing de ses prédécesseurs. Maintenez et configurez les composants amont ; le contrôleur ne peut pas réparer rétroactivement une interprétation divergente déjà utilisée.

Understand this common mistake

Corriger une concaténation PHP corrige tous les parseurs réseau.

Les composants et leurs versions doivent être examinés séparément.

Réutilisation

Une connexion réutilisée amplifie certains écarts de délimitation. La persistance peut relier plusieurs messages sur le même canal. Sur une connexion persistante, des octets mal attribués peuvent affecter l’échange suivant. Testez la réutilisation dans la chaîne isolée et vérifiez que le refus ferme ou traite correctement l’état du canal.

Understand this common mistake

Chaque octet supplémentaire est toujours isolé dans une nouvelle connexion.

La persistance peut relier plusieurs messages sur le même canal.

Traces sûres

Les journaux doivent aider sans enregistrer de secrets. Des traces de laboratoire et métadonnées peuvent suffire. Conservez décisions de parseur, corrélation et tailles nécessaires sans enregistrer cookies ou corps sensibles. Les captures de laboratoire peuvent être détaillées parce que leurs données sont conçues pour être publiques.

Understand this common mistake

Une investigation impose tous les corps réels en clair.

Des traces de laboratoire et métadonnées peuvent suffire.

Atelier guidé : lire, expliquer et vérifier le code

Content-Encoding: gzip
Transfer-Encoding: chunked

Extrait HTTP/1.1 de laboratoire, pas une politique universelle de proxy.

L’extrait montre simultanément un contenu gzip et un transfert chunked dans un contexte HTTP/1.1. Expliquez les deux couches sans en déduire une politique universelle applicable à HTTP/2. Pour valider la sécurité, il faut examiner la délimitation et les conversions de toute la chaîne réelle.

Ils ne décident pas des permissions. gzip nomme un codage, pas un nombre. Le contenu compressé peut être transporté selon une délimitation séparée. Aucun de ces champs ne signifie TLS.

Travail pratique : Inventoriez les parseurs traversés par votre requête de laboratoire et leurs versions. Recherchez les règles documentées concernant les délimitations ambiguës.

Critères de correction : Comparez configurations et contrats, puis utilisez des tests de non-régression dans un environnement dédié. Vérifiez le refus avant tout traitement métier et la fermeture de la connexion si la politique l’exige.

Worked example

Content-Encoding: gzip

Décrit la représentation compressée.
Transfer-Encoding : mécanisme de transfert distinct en HTTP/1.1.

Décompresser une représentation ne résout pas une ambiguïté de délimitation de la connexion. Les deux traitements doivent être identifiés.

Practical exercise

Inventoriez les parseurs traversés par votre requête de laboratoire et leurs versions. Recherchez les règles documentées concernant les délimitations ambiguës.

View a suggested solution

Comparez configurations et contrats, puis utilisez des tests de non-régression dans un environnement dédié. Vérifiez le refus avant tout traitement métier et la fermeture de la connexion si la politique l’exige.

Verification checklist

  • Distinguer transfert et représentation.
  • Refuser les ambiguïtés.
  • Tester la chaîne complète.

Knowledge check

Related lesson: 07. Délimitation et encodage de transfert ↗
Content-Encoding et Transfer-Encoding expriment-ils la même propriété ?

Reference documentation ↗

Module validation

101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.

Start or resume the 101 questions →