Почему я не могу прочитать содержимое cookie-файла SameSite Lax при открытии ссылки из приложения Gmail для iOS?

Сайт моей компании (mercury.co) рассылает пользователям ссылки для сброса пароля. Мы столкнулись с некоторым действительно странным поведением, которое мы можем воспроизвести только в приложении Gmail для iOS, относящемся к атрибуту SameSite Lax:

  1. Пользователь переходит по ссылке в своем электронном письме на https://mercury.co/reset-password
  2. Браузер загружает Javascript с этого URL для настройки сайта
  3. Клиент выполняет запрос GET, который возвращает токен CSRF в файле cookie. Этот токен имеет установленный атрибут SameSite Lax.
  4. Ожидаемое поведение: клиент может прочитать cookie с маркером CSRF. Фактическое поведение: клиент не может прочитать cookie. Мы определили это, выполнив предупреждение (document.cookie) и увидев, что токен CSRF отсутствует, когда установлен тот же самый сайт, но установлен, когда атрибут того же сайта не установлен.

Это приводит к сбою следующего запроса POST, поскольку он не может получить токен CSRF для отправки на сервер. Хотя, если вы посмотрите на cookie-файлы, которые отправляются в запросе, он включает cookie-файл с маркером CSRF.

Насколько я понимаю, куки должны быть читаемыми, потому что в этом контексте они не являются межсайтовыми. И это, безусловно, не должно быть нечитаемым, а затем отправлено на сервер при следующем запросе.

Насколько я понимаю, файлы cookie SameSite Lax не должны мешать клиенту читать этот файл cookie.

В качестве исправления мы определили, что нам не нужен атрибут SameSite Lax для этого конкретного файла cookie. Тем не менее, мы все еще хотели бы понять причину этой проблемы.

Некоторые детали нашего расследования до сих пор:

  • Мы можем воспроизвести проблему только в приложении iOS Gmail. Мы не можем воспроизвести проблему, создав собственный UIWebview или WKWebview (я запускал симулятор iOS для iOS 12.2). Мы не можем воспроизвести его на двух iPad, которые мы тестировали (хотя, возможно, это разные версии iOS). Я тестировал на своем iPhone под управлением iOS 12.2
  • Основываясь на использовании этого метода: /questions/13150298/kak-opredelit-zagruzhaetsya-li-veb-stranitsa-vnutri-iframe-ili-neposredstvenno-v-okne-brauzera/13150308#13150308 наше приложение не встроено в iframe или что-либо еще при запуске в Gmail. Мы также не разрешаем переносить наш сайт в iframe через заголовок.

1 ответ

Вы в основном ответили на свой вопрос (и указали мне правильное направление:-)). Для полноты картины я обнаружил соответствующую ошибку: Safari (по-прежнему) не отправляет файлы cookie Lax после межсайтового перенаправления.

Это было исправлено в выпуске 77, что объясняет, почему ошибка не возникает в iOS 12.3.1.

Как оказалось, это, должно быть, ошибка в iOS 12.2, потому что я больше не могу воспроизвести это поведение в iOS 12.3.1. Я не могу найти список изменений iOS достаточно подробным, чтобы показать это исправление, и я не нашел ничего релевантного в журнале изменений Webkit.

Другие вопросы по тегам