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

Module 5 / 40 · 90 min

05. Champs, valeurs et frontières d’interprétation

Traiter les en-têtes comme un contrat structuré et non comme du texte libre.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Les champs HTTP transportent des métadonnées avec une syntaxe et une sémantique définies par champ. Certains acceptent des listes ; d’autres ne peuvent pas être combinés arbitrairement. Une application ne doit pas supposer que toutes les valeurs multiples se concatènent avec une virgule. Les noms de champs sont insensibles à la casse, mais les valeurs obéissent à leurs règles propres. Les intermédiaires peuvent aussi supprimer ou reconstruire des informations sur chaque saut.

Raisonner et vérifier

Une valeur reçue du client demeure non fiable, même lorsqu’elle porte un nom évoquant la sécurité. Évitez de construire un champ de réponse en concaténant des entrées contenant des caractères de contrôle. Utilisez les API structurées du framework et une liste fermée pour les choix de politique. Testez les doublons, valeurs absentes, casse et normalisations avec le véritable chemin proxy-application, en observant ce que chaque couche transmet.

Casse des noms

Les noms de champs sont insensibles à la casse. La casse du nom ne change pas sa sémantique HTTP. Content-Type et content-type désignent le même nom de champ. Utilisez les API du serveur et du client pour éviter une logique de sécurité qui ne vérifierait qu’une orthographe particulière.

Erreur fréquente à comprendre

Changer Authorization en authorization supprime son sens.

La casse du nom ne change pas sa sémantique HTTP.

Valeurs spécifiques

Les règles des valeurs dépendent du champ. La grammaire des valeurs est propre au champ. Un nom insensible à la casse n’implique pas une règle uniforme sur toutes les valeurs. Suivez la définition de chaque champ avant de normaliser, découper ou comparer ses données.

Erreur fréquente à comprendre

Toutes les valeurs sont insensibles à la casse.

La grammaire des valeurs est propre au champ.

Champs multiples

Certains champs ne se combinent pas librement. La combinaison dépend de la définition du champ. Set-Cookie doit conserver ses valeurs selon ses règles propres. Une fusion générale par virgule peut modifier l’interprétation ; testez le résultat à travers les bibliothèques et proxies réellement utilisés.

Erreur fréquente à comprendre

Tous les doublons se concatènent avec une virgule.

La combinaison dépend de la définition du champ.

Négociation

Accept exprime une préférence de représentation. Content-Type décrit le contenu du message concerné. Accept décrit les préférences du client sur la représentation reçue. Content-Type décrit le type du contenu envoyé ; inverser ces rôles peut produire un parsing erroné ou une réponse inattendue.

Erreur fréquente à comprendre

Accept décrit obligatoirement le corps envoyé.

Content-Type décrit le contenu du message concerné.

Rôle client hostile

Un champ de rôle client reste non fiable. Le nom ne prouve pas l’autorité du producteur. X-User-Role: admin n’établit pas un privilège. Une architecture de headers d’identité exige un intermédiaire authentifié qui retire les valeurs externes et une application qui ne fait confiance qu’à ce chemin.

Erreur fréquente à comprendre

X-User-Role admin suffit à accorder admin.

Le nom ne prouve pas l’autorité du producteur.

API structurée

Les API structurées évitent des concaténations dangereuses. Des caractères de contrôle peuvent altérer l’interprétation. Ne concaténez pas une entrée contenant retours de ligne dans une réponse HTTP brute. Utilisez les APIs de champs et leurs validations, puis testez les valeurs malformées avant toute émission.

Erreur fréquente à comprendre

Concaténer tout texte client dans une réponse est sûr.

Des caractères de contrôle peuvent altérer l’interprétation.

Transformation proxy

Un proxy peut reconstruire certains champs. Les intermédiaires peuvent transformer le message. Un proxy peut supprimer, ajouter ou réécrire des champs. Définissez lesquels font autorité et observez les deux côtés ; l’application ne voit pas nécessairement les mêmes octets que le navigateur.

Erreur fréquente à comprendre

L’application reçoit nécessairement les octets initiaux de chaque champ.

Les intermédiaires peuvent transformer le message.

Trajet réel

Il faut tester les champs multiples sur le trajet réel. Les parseurs successifs peuvent appliquer des traitements différents. Des champs dupliqués peuvent être conservés ou regroupés différemment selon les composants. Une fixture unitaire ne prouve pas le comportement complet ; testez dans un environnement isolé qui reproduit la chaîne.

Erreur fréquente à comprendre

Un test de chaîne isolé prouve tous les comportements proxy.

Les parseurs successifs peuvent appliquer des traitements différents.

Nom flatteur

Un identifiant client ne devient pas fiable par renommage. Une convention de nommage n’établit pas une confiance. Renommer une valeur client en Trusted-User ne change pas sa provenance. La confiance dépend de l’authentification du producteur et du contrôle du trajet, pas du vocabulaire choisi dans le nom.

Erreur fréquente à comprendre

Un préfixe X- authentifie une valeur.

Une convention de nommage n’établit pas une confiance.

Absence prévue

Une absence peut demander un refus ou une valeur prévue. La politique doit définir les cas manquants. Définissez si un champ requis absent provoque un refus ou un défaut sûr. Une valeur de repli trop permissive peut ouvrir un accès lorsque le proxy ou un client omet une donnée nécessaire.

Erreur fréquente à comprendre

Tout champ absent peut être inventé sans contrat.

La politique doit définir les cas manquants.

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

Set-Cookie: lab_session=a; Path=/; HttpOnly
Set-Cookie: lab_theme=dark; Path=/

Les deux lignes Set-Cookie décrivent deux cookies distincts. Elles ne doivent pas être transformées mécaniquement en un champ fusionné comme n’importe quelle liste. Vérifiez le nombre de cookies effectivement reçus par le navigateur et gardez leur attribut Path et leur protection individuelle.

La combinaison des champs dépend de leur définition, pas d’une règle universelle. Les grammaires et règles de combinaison diffèrent. Un séparateur n’est pas un chiffrement. Plusieurs champs Set-Cookie peuvent être nécessaires.

Travail pratique : Inventoriez les champs utilisés pour langue, format, identité et corrélation. Pour chacun, définissez producteur autorisé, validation et comportement en cas de doublon.

Critères de correction : Envoyez des requêtes de laboratoire avec variantes contrôlées et relevez la valeur effectivement lue par le framework. Refusez les ambiguïtés pertinentes au lieu de laisser deux couches interpréter des identités différentes.

Exemple commenté

Accept: application/json
Content-Type: application/json
X-Request-ID: lab-42

Les trois champs n’expriment pas la même propriété.

Accept indique une préférence de représentation ; Content-Type décrit le contenu du message concerné ; l’identifiant de corrélation suit un contrat local.

Exercice de mise en pratique

Inventoriez les champs utilisés pour langue, format, identité et corrélation. Pour chacun, définissez producteur autorisé, validation et comportement en cas de doublon.

Voir une proposition de correction

Envoyez des requêtes de laboratoire avec variantes contrôlées et relevez la valeur effectivement lue par le framework. Refusez les ambiguïtés pertinentes au lieu de laisser deux couches interpréter des identités différentes.

Points de vérification

  • Connaître le contrat par champ.
  • Ne pas faire confiance au nom du champ.
  • Éviter les concaténations avec contrôles non validés.

Contrôle de connaissances

Cours associé : 05. Champs, valeurs et frontières d’interprétation ↗
Peut-on combiner tous les champs HTTP multiples avec une virgule ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →