Кросс-доменные AJAX-запросы с использованием Fetch с учетными данными: ‘include’ и куки, установленной с SameSite=None, не отправляются в Firefox.

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

Кросс-доменные AJAX-запросы с использованием Fetch с учетными данными: ‘include’ и куки, установленной с SameSite=None, не отправляются в Firefox.

Я пытаюсь сделать межсайтовый AJAX-запрос с помощью fetch с attacker.local на defender.local, и я хочу, чтобы этот запрос включал куки, которые установлены на defender.local.

Я следовал этому руководству: https://stackoverflow.com/a/67001424

https://defender.local установил куки с помощью этого заголовка:

Set-Cookie: secure-cookie=secure-cookie-value; Max-Age=86400; Domain=.defender.local; Path=/; Expires=Сб, 21 Сен 2024 16:50:02 GMT; Secure; SameSite=None

Мой запрос fetch (с attacker.local) выполнен с помощью:

fetch('https://defender.local', {
  method: 'post',
  credentials: 'include',
});

defender.local отвечает с этими заголовками:

Access-Control-Allow-Origin: https://attacker.local
Access-Control-Allow-Credentials: true

Выполняя этот запрос в Chrome v129, куки включены, но не в Firefox v130.

Почему куки не включены в POST-запрос на Firefox?

Firefox защищает пользователей от межсайтовых запросов, которые могли бы использовать куки назначения, запрещая куки в таких межсайтовых запросах, когда включена Защита от отслеживания:

Firefox не отправляет куки с межсайтовым запросом, когда включена Защита от отслеживания

При отключенной Защите от отслеживания Firefox отправит куки:

Firefox отправляет куки с межсайтовым запросом, когда Защита от отслеживания отключена

Ответ или решение

Ваша проблема заключается в том, что Firefox защищает своих пользователей от потенциальных угроз, связанных с кросс-доменными запросами, что может объяснить отсутствие отправки cookie в вашем запросе. Давайте подробнее рассмотрим это.

  1. Настройка Cookie: Вы указали, что cookie на defender.local настроены с заголовком:

    Set-Cookie: secure-cookie=secure-cookie-value; Max-Age=86400; Domain=.defender.local; Path=/; Expires=Sat, 21 Sep 2024 16:50:02 GMT; Secure; SameSite=None

    Это означает, что cookie соответствует требованию безопасности, так как установлены флаги Secure и SameSite=None.

  2. Запрос с использованием Fetch API: Ваш запрос выглядит следующим образом:

    fetch('https://defender.local', {
     method: 'post',
     credentials: 'include',
    });
  3. CORS и заголовки ответа: Вы правильно указали заголовки ответа сервера:

    Access-Control-Allow-Origin: https://attacker.local
    Access-Control-Allow-Credentials: true

    Это означает, что сервер допускает кросс-доменные запросы от attacker.local и поддерживает передачу учетных данных.

  4. Enhanced Tracking Protection в Firefox: Основная причина, по которой cookie не отправляется в Firefox, связана с функцией «Улучшенной защиты от отслеживания» (Enhanced Tracking Protection). Эта функция блокирует кросс-доменные запросы, использующие cookie, что может объяснить поведение, которое вы наблюдаете.

    • Если «Улучшенная защита от отслеживания» включена, Firefox не отправит cookie при кросс-доменных запросах, даже если все заголовки настроены правильно.
    • Чтобы проверить это, вы можете отключить «Улучшенную защиту от отслеживания» в настройках Firefox для вашего сайта.

    Для этого перейдите в настройки конфиденциальности и безопасности Firefox и убедитесь, что уровень защиты стоит на «Стандартный» или «Настроенный», где отключены параметры, касающиеся блокировки кросс-доменных cookie.

  5. Вывод: Невозможность отправки cookie в запросах из Firefox может быть связана с политикой конфиденциальности браузера, а не с неправильной настройкой вашего кода или сервера. Рекомендуется проверить настройки браузера, а также протестировать работу вашего приложения в режиме инкогнито (где обычно отключена «Улучшенная защита от отслеживания») или в другом браузере.

Если вы хотите, чтобы поведение было одинаковым в разных браузерах, вам нужно учитывать настройки приватности пользователей и рекомендовать пользователям браузеров, которые могут блокировать такие запросы.

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

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