Для чего используется атрибут SameSite у cookie?

«Для чего используется атрибут SameSite у cookie?» — вопрос из категории Безопасность, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Атрибут SameSite управляет тем, отправляются ли cookie с кросс-сайтовыми (cross-site) запросами. Это важный механизм защиты от атак типа межсайтовой подделки запроса (CSRF) и утечки конфиденциальных данных.

Значения атрибута:

  • Strict: Cookie отправляются только в контексте того же сайта (точно совпадающий домен). Не отправляются при переходе по ссылке с другого сайта. Максимальная безопасность, но может нарушить UX (например, после входа по ссылке из почты пользователь окажется неавторизованным).
  • Lax (значение по умолчанию в современных браузерах): Cookie отправляются при безопасных методах запроса (GET) и во время навигационных переходов (например, переход по ссылке). Блокирует отправку cookie в кросс-сайтовых POST-запросах, что предотвращает большинство CSRF-атак.
  • None: Cookie отправляются при любых кросс-сайтовых запросах. Обязательно требует установки флага Secure (передача только по HTTPS). Используется для функциональности, требующей кросс-доменного взаимодействия (например, виджеты, аутентификация в iframe).

Пример установки в Node.js с Express:

// Установка сессионной куки с SameSite=Lax
res.cookie('sessionId', 'abc123', {
  httpOnly: true,   // Защита от доступа через JavaScript (XSS)
  secure: process.env.NODE_ENV === 'production', // Только по HTTPS в продакшене
  sameSite: 'lax',  // Баланс безопасности и удобства
  maxAge: 24 * 60 * 60 * 1000 // Срок жизни 1 день
});