Вопрос или проблема
Что я понял (наверное):
-
Кросс-доменные куки:
Куки, установленные сDomain="example.com"
, не отправляются с запросамиfetch
из источников, таких какhello.example2.com
, наmywebsite.example.com
, поскольку это разные домены. Однако я знаю, что может быть злонамеренный обход этого ограничения через<form>
(пункт 3). -
Запросы Fetch и поведение
SameSite
:
ПриSameSite="Strict"
куки, установленные сDomain="example.com"
, включаются в запросыfetch
из подсайтов, таких какfrontend.example.com
, но не из незнакомых доменов, таких какhello.test.example.com
. ПриSameSite="None"
куки должны отправляться даже из разных подсайтов, если они принадлежат одному и тому же домену. -
Отправка форм и куки:
Отправки форм из разных доменов, таких какhello.example2.com
, включают куки приSameSite="None"
, но не приSameSite="Strict"
. HTML-формы обходят ограничения CORS, поскольку они напрямую открывают целевой URL.
Вопросы:
-
Как компании, такие как Google и Amazon, умеют отслеживать пользователей на нескольких внешних доменах?
Учитывая, что даже если Google установил свои куки сSameSite=None
, запросы, сделанные с помощьюfetch
сwebsite.com
(который использует Google Adsense и имеет URL google.com/trackme), не могут включать куки Google, поскольку это другой домен, как эти компании эффективно используют куки для отслеживания пользователей на различных внешних доменах и сайтах? -
Почему установка
domain: "frontend.example.com"
вызывает неправильную настройку куки?
Когда я устанавливаю в своем бэкенде настройкуdomain: "frontend.example.com"
для куки, используемой специально фронтенд-сайтом, куки не устанавливаются на фронтенде, как ожидалось, и фронтенд перестает работать. Как я могу убедиться, чтоfrontend.example.com
может использовать куки, в то время какtest3.example.com
не может к ним получить доступ? Что мне необходимо настроить для достижения этой цели?
Куки для домена могут быть включены в запросы к этому домену, даже для кросс-сайтовых запросов. Если website.com выполняет запрос к google.com, куки для google.com включаются, а не куки для website.com.
Куки, которые являются однодоменными (либо по умолчанию, либо явно установленные), не будут включены в кросс-сайтовые запросы, поэтому куки для отслеживания обычно устанавливаются с SameSite=null
.
API fetch может включать куки, но вам нужно передать параметр для этого.
CORS на самом деле не влияет на поведение куки. CORS может только ослабить политику одного источника для запросов, исходящих из JavaScript.
HTML-формы обходят ограничения CORS, поскольку они напрямую открывают целевой URL.
Это неточно. CORS не является ограничением, а облегчением политики одного источника. Каждый запрос, который может быть отправлен с помощью формы, также может быть отправлен из JavaScript (без предварительного запроса).
Ответ или решение
Понимание кросс-доменных куки и атрибутов SameSite
с использованием Express.js и стороннего трекинга
Что я понял (насколько я могу судить):
-
Кросс-оригинальные куки:
Куки, установленные сDomain="example.com"
, не отправляются сfetch
запросами с таких источников, какhello.example2.com
, наmywebsite.example.com
, так как это разные домены. Тем не менее, существует возможность обойти это с помощью элементарных форм (пункт 3). -
Запросы Fetch и поведение
SameSite
:
При использованииSameSite="Strict"
куки, установленные дляDomain="example.com"
, включаются в запросы сfetch
из поддоменов, таких какfrontend.example.com
, но не включаются из несвязанных доменов, таких какhello.test.example.com
. С использованиемSameSite="None"
куки должны передаваться даже из разных поддоменов, если они принадлежат одному домену. -
Отправка форм и куки:
Отправки форм с разных доменов, таких какhello.example2.com
, включают куки приSameSite="None"
, но не приSameSite="Strict"
. HTML формы обходят ограничения CORS, так как они напрямую открывают целевой URL.
Вопросы:
-
Как компании, такие как Google и Amazon, управляют отслеживанием пользователей через несколько внешних доменов?
Несмотря на то, что даже если Google установит свои куки сSameSite=None
, запросы, сделанные сfetch
с сайтаwebsite.com
(который использует Google Adsense и имеет URL google.com/trackme), не могут включать куки Google, так как это другой домен. Как эти компании эффективно используют куки для отслеживания пользователей через различные внешние домены и сайты?Ответ:
Компании, такие как Google и Amazon, используют кросс-доменные куки, устанавливая их с атрибутомSameSite=None
иSecure
, что позволяет им передаваться во время кросс-доменных запросов. Они также работают с JavaScript для выполненияfetch
запросов с передачей куки, используя конфигурациюcredentials: 'include'
. Это означает, что куки будут отправлены с запросами, если пользователь взаимодействует с элементами на сайте. Кроме того, такие компании часто внедряют свои скрипты в различные веб-сайты, что позволяет им собирать данные о пользователях и их взаимодействиях через идентификаторы сессий и другие механизмы, не полагаясь исключительно на куки. -
Почему установка
domain: "frontend.example.com"
приводит к неправильной установке куки?
Когда я вношу в свой бэкенд настройкуdomain: "frontend.example.com"
для куки, который должен использоваться конкретно фронтендом, куки не устанавливается на фронтенде, как ожидалось, и фронтенд перестает работать. Как я могу гарантировать, чтоfrontend.example.com
может использовать куки, предотвращая доступ к ним изtest3.example.com
? Что необходимо настроить для достижения этой цели?Ответ:
Настройкаdomain: "frontend.example.com"
для куки позволяет этому куки быть доступным только с этого поддомена. Если по какой-то причине куки не устанавливаются, возможно, причина в неправильной конфигурации сервера или браузера. Чтобы обеспечить корректную настройку, проверьте следующие аспекты:- Убедитесь, что кука устанавливается от сервера, который находится на
frontend.example.com
, а не от другого домена. - Убедитесь в использовании протокола HTTPS, особенно когда у куки установлен атрибут
Secure
. - Убедитесь, что атрибут
SameSite
настроен правильно (если требуется кросс-доменное взаимодействие, установитеSameSite=None
). - Проверьте, нет ли в коде фронтенда или бэкенда ошибок, препятствующих установке куки.
- Убедитесь, что кука устанавливается от сервера, который находится на
Заключение
Понимание работы куки и атрибутов SameSite
является критически важным для разработки веб-приложений, особенно с учетом важности аспектов безопасности и конфиденциальности. Компании используют различные техники, чтобы отслеживать пользователей через разные домены, и правильная настройка куки в вашем приложении может помочь избежать неожиданных проблем с доступом и функциональностью.