Файлы cookie, фреймы, субдомены и перенаправления SameSite - PullRequest
2 голосов
/ 17 января 2020

Концепция SameSite для Cookies определенно трудна для понимания asp ...

При подготовке к изменениям Chrome 80 , я пытаюсь чтобы оценить влияние отсутствия атрибута SameSite на мои файлы cookie. У меня есть следующая конфигурация:

  1. Пользователь изначально получает доступ main.mysite.com
  2. main.mysite.com наборы SomeCook ie (Set-Cookie: SomeCookie=value; path=/; secure; httponly) и перенаправляет на auth.mysite.com
  3. Пользователь проходит аутентификацию на auth.mysite.com и перенаправляется обратно на main.mysite.com (запрос POST)

Поскольку перенаправления между main.mysite.com и auth.mysite.com считаются одним и тем же сайтом, и поскольку атрибут SameSite рассматривается как SameSite=Lax для Chrome 80, это прекрасно работает.

Однако, когда main.mysite.com встроен в рамку на странице, размещенной на другом сайте (скажем, othersite.com ), SomeCook ie не отправляется обратно на main.mysite.com на шаге 3:

Illustration showing what the problem happening

Это нормально и почему?

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Ответ выше просто неправильный ... Позвольте мне прояснить некоторые недоразумения. Когда 2 сайта являются «одним и тем же сайтом» для целей SameSite?

Независимо от атрибута домена у повара ie, два сайта считаются одинаковыми, когда их eTLD + 1 (или регистрируемый) домен) одинаковы. См. Мой ответ здесь для более подробного объяснения.

Так что в этом случае, предполагая, что eTLD - ".com", мы бы рассмотрели auth.mysite.com и main.mysite.com. быть одним и тем же сайтом, потому что eTLD + 1 - это mysite.com для них обоих. С другой стороны что-нибудь.mysite.com и othersite.com всегда кросс-сайт. Это верно, будь то навигация верхнего уровня или запрос субресурса (например, изображение или документ в iframe).

2. Что означает атрибут «Домен»?

Если для параметра cook ie установлено значение Set-Cookie: cookiename=cookievalue; Domain=mysite.com, повар ie будет отправляться на запросы в любой домен, соответствующий * .mysite.com ( т.е. все субдомены).

Это способ настроить область действия повара ie. Например, вы могли бы использовать Domain=mysite.com для глобального повара ie, о котором заботятся все ваши домены, и Domain=corp.mysite.com для повара ie, о котором заботятся все внутренние домены вашей компании (но не ваш внешний интерфейс) домены, например).

По умолчанию (для файлов cookie, в которых явно не указан атрибут домена) файлы cookie отправляются только в домен, в котором установлен параметр Cook ie. (Нет поддоменов.)

Вы не можете установить атрибут Домена, который не соответствует URL-адресу запроса.

(Кроме того, не существует такой вещи, как атрибут «происхождение» у повара). ie.)

3. Так какое отношение домен имеет к SameSite?

Ничего. Они являются независимыми поварами ie. Домен не заботится о контексте одного и того же сайта / межсайта, а SameSite не заботится о области действия домена / субдомена cook ie.

4. Почему mysite.com встроен в iframe на othersite.com, почему файлы cookie Lax по умолчанию не отправляются?

Это считается межсайтовым контекстом, поскольку сайт в строке URL-адреса пользователя othersite.com, тогда как запрос сделан на mysite.com, и у них есть два разных eTLD + 1.

Поскольку он находится в iframe, это не навигация верхнего уровня, поэтому все межсайтовые запросы будут исключить файлы cookie SameSite.

Если бы это было навигацией верхнего уровня (пользователь нажимает на ссылку, которая ведет их с othersite.com на mysite.com), тогда метод запроса будет иметь значение. В подавляющем большинстве случаев это будет запрос GET, поэтому повар ie в режиме Lax будет отправлен.

Надеюсь, это поможет! Вы можете обратиться к последней версии spe c для получения более подробной информации.

1 голос
/ 18 января 2020

Прежде всего, я предполагаю, что атрибут domain для повара ie установлен как auth.mysite.com, а не как .mysite.com. Если домен атрибут повара ie равен auth.mysite.com, то auth.mysite.com и main.mysite.com не рассматривается как SameSite.

Необходимо установить свойство домена cook ie на .mysite.com, чтобы браузер мог видеть разделяет источник между двумя сайтами и считает их одним и тем же сайтом.

Мой ответ на ваш вопрос: Да, это нормально, что SomeCook ie не отправляется вернуться к main.mysite.com , когда вы используете iframes, по следующим причинам:

  • При отсутствии атрибута sameSite значение атрибута обрабатывается Lax
  • SameSite=Lax практически совпадает с SameSite=Strict, за исключением того, что SameSite=Lax также позволяет отправлять повара ie по 'Навигация верхнего уровня', Навигация верхнего уровня - это тип навигации, когда значение в строке URL изменяется. Контекст iframe не интерпретируется как навигация верхнего уровня.

Если вы хотите сделать файлы cookie доступными для контекста iframe, вы можете сделать две вещи:

  1. Установить sameSite значение атрибута none и одновременно установить secure значение атрибута true Таким образом, вы явно сообщаете браузеру свое намерение (а именно межсайтовая аутентификация).
  2. Если установить domain атрибут cook ie на .mysite.com, то вы даже можете работать с SameSite=Strict, то есть они будут интерпретироваться как один и тот же сайт, так что дополнительная осторожность не требуется.
...