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

Module 17 / 40 · 90 min

17. Set-Cookie, portée et préfixes

Comprendre ce que protège chaque attribut et ce qu’il laisse possible.

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

Secure limite l’envoi du cookie aux contextes de transport prévus comme sûrs ; HttpOnly réduit sa lecture directe via les API JavaScript concernées. SameSite contrôle certains contextes intersites. Ces attributs sont complémentaires, sans assurer l’autorisation métier ni éliminer toutes les conséquences d’une XSS. Domain et Path règlent la portée d’envoi ; un chemin ne doit pas être présenté comme une séparation de confiance absolue entre applications.

Raisonner et vérifier

Le préfixe __Host- impose des conditions utiles sur un cookie accepté par un navigateur conforme : Secure, Path=/ et absence de Domain. Pour supprimer un cookie, faites correspondre sa portée à celle de la valeur créée. Examinez les cookies dupliqués plutôt que conclure à une déconnexion à partir d’un seul champ. Testez les attributs effectivement vus dans le navigateur derrière le proxy HTTPS.

Secure

Secure restreint l’envoi du cookie aux canaux prévus comme sécurisés. La lecture du script relève notamment de HttpOnly. Le navigateur limite l’envoi selon les conditions sécurisées de cet attribut. Vérifiez HTTPS sur le parcours exposé et la perception du schéma derrière les proxies ; un attribut seul ne remplace pas toute la politique de transport.

Erreur fréquente à comprendre

Secure empêche toute lecture JavaScript.

La lecture du script relève notamment de HttpOnly.

HttpOnly

HttpOnly limite l’accès direct par JavaScript. Le script peut encore agir dans le contexte compromis. Le script ne peut pas lire directement le cookie par les API ordinaires concernées. Une XSS peut néanmoins déclencher des actions dans la page ; gardez encodage de sortie et prévention d’injection.

Erreur fréquente à comprendre

HttpOnly empêche une XSS d’effectuer toute action.

Le script peut encore agir dans le contexte compromis.

SameSite

SameSite concerne des conditions d’envoi inter-sites. Il ne chiffre pas la valeur. Cette politique porte sur des conditions d’envoi inter-sites. Site et origine diffèrent ; testez vos sous-domaines et parcours de navigation au lieu d’assimiler SameSite à un contrôle universel d’origine.

Erreur fréquente à comprendre

SameSite est un chiffrement du cookie.

Il ne chiffre pas la valeur.

None avec Secure

SameSite=None demande Secure dans les navigateurs concernés. Les navigateurs imposent des contraintes à ce mode. Les navigateurs concernés exigent Secure pour SameSite=None. Observez l’acceptation réelle et les avertissements ; une ligne Set-Cookie présente dans la réponse peut être rejetée par le client.

Erreur fréquente à comprendre

None signifie aucune exigence de transport.

Les navigateurs imposent des contraintes à ce mode.

Préfixe __Host-

__Host- exige notamment Secure, Path=/ et absence de Domain. Le préfixe réduit le périmètre selon des règles précises. Le préfixe exige notamment Secure, Path=/ et aucune directive Domain. Cette forme limite certaines portées, mais ne constitue pas à elle seule une authentification ou une politique complète de session.

Erreur fréquente à comprendre

__Host- autorise librement un Domain parent.

Le préfixe réduit le périmètre selon des règles précises.

Path

Path ne remplace pas une frontière d’autorisation métier. Le périmètre d’envoi n’établit pas le rôle. Un chemin d’envoi réduit où le navigateur joint le cookie. Il ne prouve pas qu’un acteur est autorisé sur une ressource de ce chemin et ne remplace pas les contrôles applicatifs.

Erreur fréquente à comprendre

Path=/admin prouve que le détenteur est administrateur.

Le périmètre d’envoi n’établit pas le rôle.

Construction

Set-Cookie doit suivre les API de construction adaptées. Les valeurs non contrôlées peuvent altérer le champ. Utilisez les API de cookie pour encoder valeur et attributs correctement. Une concaténation de données non fiables dans une ligne brute peut créer un résultat ambigu ou être refusée par les composants.

Erreur fréquente à comprendre

Concaténer toute entrée client dans Set-Cookie est sûr.

Les valeurs non contrôlées peuvent altérer le champ.

Deux expirations

L’expiration du cookie ne définit pas seule l’expiration serveur. Le backend doit gérer son propre cycle de session. Max-Age ou Expires guide la conservation navigateur. Le serveur doit encore limiter l’acceptation de la session ; un client peut conserver une ancienne valeur et la présenter explicitement.

Erreur fréquente à comprendre

Max-Age révoque automatiquement l’état serveur distant.

Le backend doit gérer son propre cycle de session.

Périmètre minimal

Un cookie sensible doit avoir un périmètre minimal. Un périmètre élargi peut exposer plus de contextes. Évitez Domain trop large et valeurs inutiles dans le cookie. La portée doit correspondre aux composants qui ont réellement besoin de recevoir cette capacité, avec conservation et retrait définis.

Erreur fréquente à comprendre

Un Domain très large réduit toujours l’exposition.

Un périmètre élargi peut exposer plus de contextes.

Observation déployée

Les attributs doivent être observés dans la réponse déployée. Proxy et déploiement peuvent influencer la réponse. Inspectez la réponse et le stockage navigateur après passage par le proxy. Une configuration locale correcte peut être transformée ou rejetée sur le trajet effectif ; testez le résultat reçu.

Erreur fréquente à comprendre

Une configuration locale prouve tous les attributs réellement servis.

Proxy et déploiement peuvent influencer la réponse.

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

Set-Cookie: __Host-lab=abc; Secure; Path=/; Domain=example.test; HttpOnly

Le cookie commence par __Host- mais contient Domain=example.test, en contradiction avec les exigences du préfixe. Identifiez cette directive puis vérifiez le stockage dans un navigateur. La présence textuelle du header ne garantit pas que le client accepte effectivement le cookie.

Ce préfixe exige notamment l’absence de Domain. Secure fait partie des conditions attendues. La racine est le chemin attendu pour ce préfixe. HttpOnly ne contredit pas ce contrat.

Travail pratique : Vérifiez les attributs d’un cookie de laboratoire derrière un proxy et testez sa suppression avec le bon chemin.

Critères de correction : Comparez le Set-Cookie reçu et le magasin navigateur. Vérifiez le transport HTTPS reconnu par l’application, puis la disparition effective de la valeur visée et l’invalidation serveur. Ne vous contentez pas d’un message visuel de déconnexion.

Exemple commenté

Set-Cookie: __Host-lab_session=opaque-value; Secure; HttpOnly; Path=/; SameSite=Lax

Le préfixe borne la configuration du cookie ; il ne valide pas l’utilisateur. Aucune directive Domain n’est ajoutée à cet exemple.

Exercice de mise en pratique

Vérifiez les attributs d’un cookie de laboratoire derrière un proxy et testez sa suppression avec le bon chemin.

Voir une proposition de correction

Comparez le Set-Cookie reçu et le magasin navigateur. Vérifiez le transport HTTPS reconnu par l’application, puis la disparition effective de la valeur visée et l’invalidation serveur. Ne vous contentez pas d’un message visuel de déconnexion.

Points de vérification

  • Vérifier chaque attribut.
  • Respecter la portée lors de la suppression.
  • Ne pas attribuer une autorisation au préfixe.

Contrôle de connaissances

Cours associé : 17. Set-Cookie, portée et préfixes ↗
HttpOnly élimine-t-il tous les effets possibles d’une XSS ?

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 →