Понимание междоменных куки и атрибутов SameSite с использованием Express.js и стороннего отслеживания

Вопрос или проблема

Что я понял (наверное):

  1. Кросс-доменные куки:
    Куки, установленные с Domain="example.com", не отправляются с запросами fetch из источников, таких как hello.example2.com, на mywebsite.example.com, поскольку это разные домены. Однако я знаю, что может быть злонамеренный обход этого ограничения через <form> (пункт 3).

  2. Запросы Fetch и поведение SameSite:
    При SameSite="Strict" куки, установленные с Domain="example.com", включаются в запросы fetch из подсайтов, таких как frontend.example.com, но не из незнакомых доменов, таких как hello.test.example.com. При SameSite="None" куки должны отправляться даже из разных подсайтов, если они принадлежат одному и тому же домену.

  3. Отправка форм и куки:
    Отправки форм из разных доменов, таких как hello.example2.com, включают куки при SameSite="None", но не при SameSite="Strict". HTML-формы обходят ограничения CORS, поскольку они напрямую открывают целевой URL.

Вопросы:

  1. Как компании, такие как Google и Amazon, умеют отслеживать пользователей на нескольких внешних доменах?
    Учитывая, что даже если Google установил свои куки с SameSite=None, запросы, сделанные с помощью fetch с website.com (который использует Google Adsense и имеет URL google.com/trackme), не могут включать куки Google, поскольку это другой домен, как эти компании эффективно используют куки для отслеживания пользователей на различных внешних доменах и сайтах?

  2. Почему установка 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 и стороннего трекинга

Что я понял (насколько я могу судить):

  1. Кросс-оригинальные куки:
    Куки, установленные с Domain="example.com", не отправляются с fetch запросами с таких источников, как hello.example2.com, на mywebsite.example.com, так как это разные домены. Тем не менее, существует возможность обойти это с помощью элементарных форм (пункт 3).

  2. Запросы Fetch и поведение SameSite:
    При использовании SameSite="Strict" куки, установленные для Domain="example.com", включаются в запросы с fetch из поддоменов, таких как frontend.example.com, но не включаются из несвязанных доменов, таких как hello.test.example.com. С использованием SameSite="None" куки должны передаваться даже из разных поддоменов, если они принадлежат одному домену.

  3. Отправка форм и куки:
    Отправки форм с разных доменов, таких как hello.example2.com, включают куки при SameSite="None", но не при SameSite="Strict". HTML формы обходят ограничения CORS, так как они напрямую открывают целевой URL.

Вопросы:

  1. Как компании, такие как Google и Amazon, управляют отслеживанием пользователей через несколько внешних доменов?
    Несмотря на то, что даже если Google установит свои куки с SameSite=None, запросы, сделанные с fetch с сайта website.com (который использует Google Adsense и имеет URL google.com/trackme), не могут включать куки Google, так как это другой домен. Как эти компании эффективно используют куки для отслеживания пользователей через различные внешние домены и сайты?

    Ответ:
    Компании, такие как Google и Amazon, используют кросс-доменные куки, устанавливая их с атрибутом SameSite=None и Secure, что позволяет им передаваться во время кросс-доменных запросов. Они также работают с JavaScript для выполнения fetch запросов с передачей куки, используя конфигурацию credentials: 'include'. Это означает, что куки будут отправлены с запросами, если пользователь взаимодействует с элементами на сайте. Кроме того, такие компании часто внедряют свои скрипты в различные веб-сайты, что позволяет им собирать данные о пользователях и их взаимодействиях через идентификаторы сессий и другие механизмы, не полагаясь исключительно на куки.

  2. Почему установка 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 является критически важным для разработки веб-приложений, особенно с учетом важности аспектов безопасности и конфиденциальности. Компании используют различные техники, чтобы отслеживать пользователей через разные домены, и правильная настройка куки в вашем приложении может помочь избежать неожиданных проблем с доступом и функциональностью.

Оцените материал
Добавить комментарий

Капча загружается...