flawopen.com/CSRF/Файлы cookie SameSite
Заменяет ли SameSite=Strict CSRF-токены?
SameSite=Strict — сильный браузерный уровень защиты запросов с аутентификацией через cookie, пришедших с другого сайта, но это не универсальная защита от CSRF. Соседние поддомены считаются тем же сайтом, даже если у них разные origin; клиенты, не применяющие атрибут, не защищены. Сохраняйте CSRF-токен или другую проверку источника запроса, если этого требует модель угроз.
Что именно делает SameSite
Cookie SameSite=Strict не отправляется в межсайтовых запросах, включая классическую CSRF-схему, когда другой сайт отправляет форму вашему приложению. В этом контексте браузер не прикрепляет cookie сеанса автоматически. SameSite определяется сайтом, а не origin: запрос с соседнего поддомена может считаться same-site. Поэтому Strict не защищает от скомпрометированного или недоверенного соседнего хоста. После перехода по внешней ссылке Strict также может оставить пользователя без аутентификации, поскольку cookie не передаётся при такой навигации.
Где защита ограничена
Если приложение явно помещает bearer-токен в заголовок Authorization, SameSite не управляет этим заголовком. Автоматическая отправка cookie браузером работает иначе. Это не делает любой такой вариант безопасным: проверьте, не прикрепляются ли учётные данные автоматически другим механизмом, и защищайте токены от кражи и злоупотребления.
Явный SameSite=Lax разрешает same-site-запросы и межсайтовые навигации верхнего уровня с безопасным методом, например GET; cookie не отправляется в межсайтовых подзапросах и навигациях с небезопасным методом. Если атрибут не задан, применяется значение по умолчанию пользовательского агента. В Chromium это значение отличается от явного Lax: текущая реализация позволяет некоторым cookie без явного атрибута отправляться в межсайтовых запросах верхнего уровня с небезопасным методом в течение 2 минут после создания (Lax-allowing-unsafe). Не полагайтесь на эту браузерную совместимость как на защиту от CSRF. Явно задавайте нужный атрибут, проверяйте поддерживаемые клиенты и не выполняйте изменение состояния через безопасный метод.
За применение SameSite отвечает браузер. Клиент, не поддерживающий атрибут или не соблюдающий его, не получает этой защиты. Проверьте поддерживаемые клиенты и рассматривайте SameSite как дополнительный уровень вместе с CSRF-токеном, проверкой Origin или другой основной защитой.
Часто задаваемые вопросы
См. отдельные рекомендации по безопасным методам. Не делайте изменяющие состояние действия доступными через безопасный метод, например GET; ожидается, что такие методы не меняют состояние сервера.