У нас есть файл cookie для XSRF / CSRF в начале сеанса пользователя. В какой-то момент пользователь переходит на другой домен (например, для оплаты), выполняет некоторые действия и переходит на наш домен. По возвращении в наш домен Firefox и Safari не могут прочитать файлы cookie, установленные как samesite: Strict, Chrome can. В случае Chrome и Firefox (но не Safari) они отображаются в разделе инструментов разработчика для файлов cookie.
Объяснение на одном и том же сайте MDN объясняет, что при будущих запросах cookie будет отправляться вместе с заголовками запроса. Для всех трех браузеров это так. Объяснение не дает однозначного ответа: возможно ли прочитать этот файл cookie через document.cookie? Для Firefox, Safari и Chrome мы можем читать файлы cookie «Lax», но только для Chrome мы можем читать файлы «Strict». Это также верно при обновлении страницы, но не при открытии новой вкладки (т. Е. Только с помощью навигации).
Это ошибка в Safari и Firefox или в Chrome - или спецификация неубедительна? Какой будет спецификация (w3?)?
Он может быть легко воссоздан локально с помощью веб-сервера с двумя vhosts, test.internalsite.com
и test.externalsite.com
, а эти страницы с некоторым PHP:
<?php
setcookie("CSRFLax", "hiLax", array("path"=>"/", "samesite"=>"Lax", "domain"=>"test.internalsite.com"));
setcookie("CSRFStrict", "hiStrict", array("path"=>"/", "samesite"=>"Strict", "domain"=>"test.internalsite.com"));
?>
<html>
<body>External site
<p><a href="http://test.externalsite.com">Go to External site</a></p>
<p>Document cookie: <script>document.write(document.cookie);</script></p>
</body>
</html>
И
<html>
<body>External site
<a href="http://test.internalsite.com">Go to internal Site</a>
</body>
</html>