Атрибут cookie Samesite не устанавливается с помощью JavaScript
Я пытаюсь установить атрибут SameSite, используя JavaScript на моем сайте. Код
<script type="text/javascript">
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;HttpOnly;SameSite=Lax";
</script>
Файл cookie устанавливается, но атрибут SameSite не устанавливается. Есть идеи, где я скучаю?
Спасибо
1 ответ
Ваша проблема не с SameSite
, но с HttpOnly
, HttpOnly
а также SameSite
2 независимые вещи, если убрать HttpOnly
это будет работать... и cookie будет установлен с SameSite
,
<script>
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;SameSite=Lax";
alert( document.cookie );
</script>
Вы не можете установить флаг HttpOnly через JavaScript API document.cookie. ФлагHttpOnly
может быть установлен только через заголовок cookie в ответе сервера. См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies.Cookies created via JavaScript cannot include the HttpOnly flag.
Вы написали The cookie is being set but the SameSite attribute is not being set
но я думаю это неправда. Файл cookie, установленный через JS с атрибутом HttpOnly, вообще отклоняется, или, возможно, какой-то браузер устанавливает его, но игнорирует флаг HttpOnly - так что, наконец, ваш файл cookie не только HTTP.
Это атрибут, который может быть установлен только сервером (например, HttpOnly
) в ответе куки отправляет браузеру. Было бы бессмысленно, если бы клиентскому коду было разрешено устанавливать его, если вы действительно задумываетесь о его назначении (предотвращение CSRF, заставляя браузер отправлять это только для тех же исходных запросов).
Cookie-файлы SameSite позволяют серверам требовать, чтобы cookie-файлы не отправлялись с межсайтовыми запросами, что в некоторой степени защищает от атак подделки межсайтовых запросов (CSRF). Файлы cookie SameSite все еще являются экспериментальными и еще не поддерживаются всеми браузерами.