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

Сайт моей компании (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 должен быть читабельным, поскольку в этом контексте он не является межсайтовым. И это, безусловно, не должно быть нечитаемым, а затем отправлено на сервер при следующем запросе.

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

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

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

  • Мы можем воспроизвести проблему только в приложении iOS Gmail. Мы не можем воспроизвести проблему, создав собственный UIWebview или WKWebview (я запускал симулятор iOS для iOS 12.2). Мы не можем воспроизвести его на двух iPad, которые мы тестировали (хотя, возможно, это разные версии iOS). Я тестировал на своем iPhone под управлением iOS 12.2
  • На основании использования этого метода: https://stackoverflow.com/a/18678703/1176156 наше приложение не встроено в iframe или что-либо еще при запуске в Gmail. Мы также не разрешаем переносить наш сайт в iframe через заголовок.

1 Ответ

0 голосов
/ 01 июня 2019

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

...