J'essaie de définir l'attribut SameSite à l'aide de javascript sur mon site. Le code est
<script type="text/javascript">
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;HttpOnly;SameSite=Lax";
</script>
Le cookie est défini mais l'attribut SameSite n'est pas défini. Une idée où je manque?
Merci
Votre problème n'est pas avec SameSite
, mais avec HttpOnly
. HttpOnly
et SameSite
sont 2 choses indépendantes, si vous supprimez HttpOnly
cela fonctionnera… et le cookie sera défini avec SameSite
.
<script>
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;SameSite=Lax";
alert( document.cookie );
</script>
Vous ne pouvez pas définir l'indicateur HttpOnly via l'API JavaScript document.cookie. L'indicateur HttpOnly
ne peut être défini que via l'en-tête du cookie dans la réponse du serveur. Voir https://developer.mozilla.org/en-US/docs/Web/HTTP/CookiesCookies created via JavaScript cannot include the HttpOnly flag.
Tu as écrit The cookie is being set but the SameSite attribute is not being set
mais je pense que ce n'est pas la vérité. Le cookie défini via JS avec l'attribut HttpOnly est rejeté du tout ou peut-être qu'un navigateur l'a défini, mais ignore le drapeau HttpOnly - donc, finalement, votre cookie n'est pas uniquement HTTP.
Il s'agit d'un attribut qui ne peut être défini que par le serveur (comme HttpOnly
) dans les cookies de réponse qu'il envoie au navigateur. Il serait inutile que le code côté client soit autorisé à le définir, si vous pensez vraiment à son objectif (empêcher CSRF en forçant le navigateur à n'envoyer cela que pour les mêmes demandes d'origine).
Les cookies SameSite permettent aux serveurs d'exiger qu'un cookie ne soit pas envoyé avec des demandes intersites, ce qui protège quelque peu contre les attaques de contrefaçon de demandes intersites (CSRF). Les cookies SameSite sont encore expérimentaux et ne sont pas encore pris en charge par tous les navigateurs.