From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- files/fr/web/http/headers/set-cookie/index.html | 200 +++++++++++++++++++++ .../http/headers/set-cookie/samesite/index.html | 119 ++++++++++++ 2 files changed, 319 insertions(+) create mode 100644 files/fr/web/http/headers/set-cookie/index.html create mode 100644 files/fr/web/http/headers/set-cookie/samesite/index.html (limited to 'files/fr/web/http/headers/set-cookie') diff --git a/files/fr/web/http/headers/set-cookie/index.html b/files/fr/web/http/headers/set-cookie/index.html new file mode 100644 index 0000000000..fa24cfedf4 --- /dev/null +++ b/files/fr/web/http/headers/set-cookie/index.html @@ -0,0 +1,200 @@ +--- +title: Set-Cookie +slug: Web/HTTP/Headers/Set-Cookie +tags: + - Cookies + - HTTP + - Reference + - Response + - TopicStub + - header + - samesite +translation_of: Web/HTTP/Headers/Set-Cookie +--- +

L'entête de réponse HTTP Set-Cookie est utilisé pour envoyer un cookie depuis le serveur à l'agent utilisateur pour qu'il puisse le renvoyer dans l'avenir.

+ +

Pour plus d'information, voir le guide sur les cookies HTTP.

+ + + + + + + + + + + + +
Type de l'entête{{Glossary("Response header")}}
{{Glossary("Forbidden header name")}}no
+ +

Syntaxe

+ +
Set-Cookie: <cookie-name>=<cookie-value>
+Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
+Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
+Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
+Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
+Set-Cookie: <cookie-name>=<cookie-value>; Secure
+Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
+
+Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
+Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
+Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None
+
+// Plusieurs directives sont aussi pussibles, par exemple:
+Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
+
+ +

Attributs

+ +
+
<cookie-name>=<cookie-value>
+
Un cookie commence avec la paire nom-valeur: +
    +
  • Un <cookie-name> peut-être de n'importe que caractères US-ASCII, à part les caractères de contrôle, d'espace, de tabulation et les caractères de séparation: ( ) < > @ , ; : \ " / [ ] ? = { }.
  • +
  • Un <cookie-value> peut éventuellement être entouré de doubles guillemets et inclut tout les caractères US-ASCII sauf les caractères de contrôle, {{glossary("Whitespace")}}, doubles guillemets, virgule, point-virgule et antislash. Encodage: plusieurs implémentations font un codage d'URL, cependant ce n'est pas obligatoire par la spécification RCF même si cela peut aider pour avoir des caractères permis.
  • +
  • __Secure- préfixe {{non-standard_inline}}: Les cookies commençant par __Secure- (le tiret fait partit du préfixe) doivent être définit avec le drapeau secure depuis une page sécurisée (HTTPS).
  • +
  • __Host- préfixe {{non-standard_inline}}: Les cookies commençant par __Host- doivent être définit avec le drapeau secure, depuis une page sécurisée (HTTPS), ne doivent pas avoir de domaine spécifié (et donc pas envoyé à un sous-domaine) et le chemin doit être /.
  • +
+
+
Expires=<date> {{optional_inline}}
+
+

Le temps de vie maximal d'un cookie sous la forme d'une Date HTTP. Voir {{HTTPHeader("Date")}} pour le format requis.

+ +

Si non spécifié, le cookie devient un cookie de session. Une session finit quand le client s'arrête et les cookies de sessions seront supprimés.

+ +
+

Attention: Plusieurs navigateurs ont un système de récupération de session qui enregistre les onglets et les restaure quand le navigateur redémarre. Les cookies de session seront aussi restaurés comme si le navigateur ne s'était jamais arrêté.

+
+ +

Quand la date expire, la date limite est relative au client qui le supprime, pas le serveur.

+
+
Max-Age=<number> {{optional_inline}}
+
Le nombre de secondes avant son expiration. Une valeur nulle ou négative fera expirer immédiatement le cookie. Si il y a Expires et Max-Age configuré, Max-Age sera prioritaire.
+
Domain=<domain-value> {{optional_inline}}
+
Le domaine où le cookie sera envoyé. +
    +
  • Si omis, la valeur par défaut sera l'hôte de l'URL du document courant. Les sous domaines ne seront pas inclus.
  • +
  • Contrairement aux anciennes spécifications, le point au début dans les noms de domaines (.example.com) est ignoré.
  • +
  • Plusieurs valeurs de domaine ne sont pas permis. Si un nom de domaine est spécifié, les sous domaines sont toujours inclus.
  • +
+
+
Path=<path-value> {{optional_inline}}
+
Un chemin doit exister dans l'URL de requête, ou le navigateur ne va pas envoyer d'entête Cookie.
+
La barre oblique (/) est interprétée comme un séparateur de répertoire. Les sous répertoires sont inclus, par exemple: pour Path=/docs les répertoires /docs, /docs/Web/ et /docs/Web/HTTP sont concernés.
+
Secure {{optional_inline}}
+
Un cookie sécurisé est envoyé uniquement si la requête est fait en https:. Cependant des informations confidentielles ne devraient jamais être enregistrées dans un cookie classique, en effet le mécanique est non sécurisé et ne chiffre aucune information. +

Note: Les sites non sécurisés (http:) ne peuvent plus définir des cookie «Secure» désormais (depuis Chrome 52+ et Firefox 52+).

+
+
HttpOnly {{optional_inline}}
+
Empêche JavaScript d'accéder au cookie; par exemple, au travers de la propriété {{domxref("Document.cookie")}}, de l'API {{domxref("XMLHttpRequest")}} ou de l'API {{domxref("Request")}}. Cela protège des attaques cross-site scripting ({{Glossary("XSS")}}).
+
SameSite=<samesite-value> {{optional_inline}}
+
+
    +
  • Strict: Le navigateur envoie le cookie uniquement pour les requêtes sur le même site (c'est à dire, les requêtes où le cookie a été défini). Si la requête vient d'une autre URL que celle courante, aucun cookie avec d'attribut SameSite=Strict n'est envoyé.
  • +
  • Lax: Le cookie n'est pas envoyé pour des requêtes croos-site, comme le chargement d'image ou de cadre, mais est envoyé quand un utilisateur va sur une autre site, comme lorsqu’il suit un lien.
  • +
  • None: Le navigateur envoie le cookie à la fois pour les requêtes cross-site et same-site.
  • +
+ +

S'assurer qu'un cookie ne peut pas être envoyé avec des requêtes cross-origin empêche une partie des attaques Cross-Site Request Forgery ({{Glossary("CSRF")}}).

+ +

Les navigateurs sont en migration pour que par défaut (en) SameSite=Lax. Si un cookie est doit être envoyé en cross-site, définissez explicitement la valeur None. Cette valeur nécessite l’attribut Secure.

+
+
+ +

Exemples

+ + + +

Les cookies de session sont supprimés quand le client s'éteint. Les cookies sont des cookies de session s'ils n'ont pas de directive Expires ou Max-Age.

+ +
Set-Cookie: sessionId=38afes7a8
+ + + +

Au lien d'expirer quand le client s'éteint, le cookies permanent expirent à une date spécifique (Expires) ou après une valeur de temps (Max-Age).

+ +
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT
+
+ +
Set-Cookie: id=a3fWa; Max-Age=2592000
+ +

Domaines invalides

+ +

Un cookie pour un domaine qui n'inclut pas le serveur qui le défini doit être (en) rejeté par l'agent utilisateur.

+ +

Le cookie suivant sera rejeté si le serveur est hébergé sur originalcompany.com:

+ +
Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk
+ +

Un cookie pour un sous-domaine du domaine servi sera rejeté.

+ +

Le cookie suivant sera rejeté si le serveur est hébergé sur example.com:

+ +
Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com
+ + + +

Les cookies préfixés par __Secure- ou __Host- peuvent être utilisés seulement s'ils sont définits avec l'attribut secure depuis une origine sécurisée (HTTPS).

+ +

De plus, les cookies avec le préfixe __Host- doivent avoir doivent avoir un path valant / (donc tout les chemins de l'hôte) et ne doit pas avoir d'attribut Domain.

+ +
+

Pour les clients qui n'implémentent pas les préfixes aux cookies, vous ne pouvez pas compter sur ses assurances, les cookies avec un préfixe seront toujours acceptés.

+
+ +
// Les deux sont acceptés s'ils viennent d'une origine sécurisée (HTTPS)
+Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
+Set-Cookie: __Host-ID=123; Secure; Path=/
+
+// Rejeté car l'attribut Secure est manquant
+Set-Cookie: __Secure-id=1
+
+// Rejeté car l'attribut Path=/ est manquant
+Set-Cookie: __Host-id=1; Secure
+
+// Rejeté à cause du domaine qui est spécifié
+Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + +
SpécificationTitre
{{RFC("6265", "Set-Cookie", "4.1")}}HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-05Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("http.headers.Set-Cookie", 5)}}

+ +

Note de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/http/headers/set-cookie/samesite/index.html b/files/fr/web/http/headers/set-cookie/samesite/index.html new file mode 100644 index 0000000000..85890c50df --- /dev/null +++ b/files/fr/web/http/headers/set-cookie/samesite/index.html @@ -0,0 +1,119 @@ +--- +title: SameSite cookies +slug: Web/HTTP/Headers/Set-Cookie/SameSite +tags: + - Cookies + - HTTP + - Reference + - samesite +translation_of: Web/HTTP/Headers/Set-Cookie/SameSite +--- +
{{HTTPSidebar}}
+ +

L'attribut SameSite de l'en-tête de réponse HTTP {{HTTPHeader("Set-Cookie")}} vous permet de déclarer si vos cookies doivent être restreints au site visité, à des tiers, ou à des sous-domaines du site actuel.

+ +

Valeurs

+ +

L'attribut SameSite accepte trois valeurs possibles :

+ +

Lax

+ +

Les cookies sont transférables depuis le site actuel vers des sites de niveaux inférieurs et seront envoyés lors de requêtes GET initialisées par des sites tiers. C'est la valeur par défaut des navigateurs les plus récents.

+ +

Strict

+ +

Les cookies ne seront envoyés qu'avec les requêtes effectuées sur le domaine de même niveau, et ne seront pas envoyées sur les requêtes vers des sites tiers.

+ +

None

+ +

Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type cross-origin.

+ +

None était la valeur par défaut des navigateurs, mais les navigateurs les plus récents optent désormais pour la valeur Lax comme valeur par défaut pour une meilleure défense contre les attaques de type cross-site request forgery ({{Glossary("CSRF")}}).

+ +

None requiert l'attribut Secure dans les dernières versions des navigateurs les plus récents. Voir plus bas pour plus d'informations.

+ +

Corriger les erreurs les plus communes

+ +

SameSite=None requiert Secure

+ +

Une alerte de ce type peut apparaître dans la console de votre navigateur :

+ +
+

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
+ Cookie “
myCookie” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.

+
+ +

Cet alerte apparaît dans les cas où des cookies requièrent l'attribut SameSite=None et ne sont pas marqués Secure, étant donc refusés par le navigateur.

+ +
Set-Cookie: flavor=choco; SameSite=None
+ +

Pour corriger cette erreur, vous devez ajouter l'attribut Secure à vos cookies marqués avec l'attribut SameSite=None.

+ +
Set-Cookie: flavor=choco; SameSite=None; Secure
+ +

Un cookie Secure ne sera envoyé au serveur que par le biais de requêtes utilisant le protocole HTTPS. Il est à noter que les sites non sécurisés (http:) ne peuvent pas être marqués Secure.

+ +

Les cookies sans l'attribut SameSite utilisent SameSite=Lax par défaut

+ +

Les dernières versions des navigateurs récents fournissent une valeur par défaut de SameSite plus sécurisée pour vos cookies, il se peut donc que le message suivant apparaisse dans la console de votre navigateur :

+ +
+

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
+ Cookie “
myCookie” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.

+
+ +

Cette alerte apparait car la stratégie de SameSite pour le cookie n'a pas été spécifiée explicitement :

+ +
Set-Cookie: flavor=choco
+ +

Même si vous pouvez compter sur la valeur par défaut SameSite=Lax des navigateurs récents, vous devriez tout de même spécifier la stratégie à appliquer pour ce cookie afin de communiquer clairement votre intention. Cela améliorera également l'expérience sur les autres navigateurs si ceux-ci n'utilisent pas encore la valeur par défaut Lax.

+ +
Set-Cookie: flavor=choco; SameSite=Lax
+ +

Exemples

+ +
RewriteEngine on
+RewriteBase "/"
+RewriteCond "%{HTTP_HOST}"       "^example\.org$" [NC]
+RewriteRule "^(.*)"              "https://www.example.org/index.html" [R=301,L,QSA]
+RewriteRule "^(.*)\.ht$"         "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:01:https://www.example.org:30/:SameSite=None:Secure]
+RewriteRule "^(.*)\.htm$"        "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:02:https://www.example.org:30/:SameSite=None:Secure]
+RewriteRule "^(.*)\.html$"       "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:03:https://www.example.org:30/:SameSite=None:Secure]
+[...]
+RewriteRule "^admin/(.*)\.html$" "admin/index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:09:https://www.example.org:30/:SameSite=Strict:Secure]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + +
SpécificationTitre
{{RFC("6265", "Set-Cookie", "4.1")}}HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-05Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("http.headers.Set-Cookie", 5)}}

+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf