1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
---
title: SameSite cookies
slug: Web/HTTP/Headers/Set-Cookie/SameSite
tags:
- Cookies
- HTTP
- Reference
- samesite
translation_of: Web/HTTP/Headers/Set-Cookie/SameSite
---
<div>{{HTTPSidebar}}</div>
<p><span class="seoSummary">L'attribut <strong><code>SameSite</code></strong> 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. </span></p>
<h2 id="Valeurs">Valeurs</h2>
<p>L'attribut <code>SameSite</code> accepte trois valeurs possibles :</p>
<h3 id="Lax"><code>Lax</code></h3>
<p>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.</p>
<h3 id="Strict"><code>Strict</code></h3>
<p>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.</p>
<h3 id="None"><code>None</code></h3>
<p>Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type <em>cross-origin</em>.</p>
<p><code>None</code> était la valeur par défaut des navigateurs, mais les navigateurs les plus récents optent désormais pour la valeur <code>Lax</code> comme valeur par défaut pour une meilleure défense contre les attaques de type <em>cross-site request forgery</em> ({{Glossary("CSRF")}}).</p>
<p><code>None</code> requiert l'attribut <code>Secure</code> dans les dernières versions des navigateurs les plus récents. Voir plus bas pour plus d'informations.</p>
<h2 id="Corriger_les_erreurs_les_plus_communes">Corriger les erreurs les plus communes</h2>
<h3 id="SameSiteNone_requiert_Secure"><code>SameSite=None</code> requiert <code>Secure</code></h3>
<p>Une alerte de ce type peut apparaître dans la console de votre navigateur :</p>
<blockquote>
<p><em>Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.<br>
Cookie “</em>myCookie<em>” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.</em></p>
</blockquote>
<p>Cet alerte apparaît dans les cas où des cookies requièrent l'attribut <code>SameSite=None</code> et ne sont pas marqués <code>Secure</code>, étant donc refusés par le navigateur.</p>
<pre class="example-bad notranslate">Set-Cookie: flavor=choco; SameSite=None</pre>
<p>Pour corriger cette erreur, vous devez ajouter l'attribut <code>Secure</code> à vos cookies marqués avec l'attribut <code>SameSite=None</code>.</p>
<pre class="example-good notranslate">Set-Cookie: flavor=choco; SameSite=None; <strong>Secure</strong></pre>
<p>Un cookie <code>Secure</code> 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 (<code>http:</code>) ne peuvent pas être marqués <code>Secure</code>.</p>
<h3 id="Les_cookies_sans_lattribut_SameSite_utilisent_SameSiteLax_par_défaut">Les cookies sans l'attribut <code>SameSite</code> utilisent <code>SameSite=Lax</code> par défaut</h3>
<p>Les dernières versions des navigateurs récents fournissent une valeur par défaut de <code>SameSite</code> plus sécurisée pour vos cookies, il se peut donc que le message suivant apparaisse dans la console de votre navigateur :</p>
<blockquote>
<p><em>Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.<br>
Cookie “</em>myCookie<em>” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.</em></p>
</blockquote>
<p>Cette alerte apparait car la stratégie de <code>SameSite</code> pour le cookie n'a pas été spécifiée explicitement :</p>
<pre class="example-bad notranslate">Set-Cookie: flavor=choco</pre>
<p>Même si vous pouvez compter sur la valeur par défaut <code>SameSite=Lax</code> 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 <code>Lax</code>.</p>
<pre class="example-good notranslate">Set-Cookie: flavor=choco; <strong>SameSite=Lax</strong></pre>
<h2 id="Exemples"><strong>Exemples</strong></h2>
<pre class="notranslate">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]
</pre>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Spécification</th>
<th scope="col">Titre</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{RFC("6265", "Set-Cookie", "4.1")}}</td>
<td>HTTP State Management Mechanism</td>
</tr>
<tr>
<td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05">draft-ietf-httpbis-rfc6265bis-05</a></td>
<td>Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies</td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("http.headers.Set-Cookie", 5)}}</p>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="/fr/docs/Web/HTTP/Cookies">Les cookies HTTP</a></li>
<li>{{HTTPHeader("Cookie")}}</li>
<li>{{domxref("Document.cookie")}}</li>
</ul>
|