SameSite

SameSite — атрибут кук, ограничивающий их отправку на cross-site запросы. Придуман для защиты от CSRF. Стандарт: RFC 6265bis.

Три значения

ЗначениеКогда шлётся кука
Strictтолько если запрос с того же site (не иначе как из закладки/ввода URL)
Laxтакже при top-level navigation (клик по ссылке), но не image/iframe/form POST
Noneвсегда. Требует Secure флаг

Default

Chrome с 2020, Firefox чуть позже: SameSite=Lax по умолчанию, если атрибут не указан. Плюс есть Lax+POST-переходник на 2 минуты после установки — для совместимости.

Что такое "same site"

По eTLD+1. a.example.com и b.example.com — тот же site. example.com и example.co.uk — разные (проверяется по Public Suffix List).

Пример

Set-Cookie: session=abc; HttpOnly; Secure; SameSite=Lax; Path=/
Set-Cookie: theme=dark; SameSite=None; Secure   # для встроенного виджета

Схема-безопасность

С Chrome 89: HTTP и HTTPS того же хоста считаются разными site для SameSite (schemeful same-site).

SameSite=None (третьи стороны)

Куки для встроенных iframe, Sign-in-with-Google, ad networks. Обязательно Secure. С 2024-2025 сторонние куки постепенно отключаются (Chrome, Safari уже давно).

Атака Lax+POST

В окне 2 минут после setSession кука уходит на POST → CSRF возможен. Chrome оставил для совместимости с OAuth, но best practice — Strict + отдельная кука для CSRF-token.

См. также