Выбор ответа Middle Безопасность фронтенда спрашивают часто обновлено

Защищает ли CORS от CSRF

Вопрос

Бэкенд не отдаёт заголовков CORS, сессия в куке с SameSite=None; Secure. Защищён ли он от CSRF через автоотправку HTML-формы с чужого сайта?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: CORS запрещает читать ответ, а POST формы уйдёт с кукой и выполнится. Same-origin policy и CORS регулируют, может ли скрипт прочитать ответ.

Варианты ответа

  1. Да: без CORS-заголовков браузер вообще не отправит запрос на другой origin
  2. Да, но только для методов PUT и DELETE: их форма с чужого сайта не отправит
  3. Нет: CORS запрещает читать ответ, а POST формы уйдёт с кукой и выполнитсяправильный ответ
  4. Нет, потому что CORS работает только для GET, а POST формы он не проверяет

Разбор

Same-origin policy и CORS регулируют, может ли скрипт прочитать ответ. Простые запросы (форма с POST) браузер отправляет на любой origin, а кука с SameSite=None к ним приложится, и сервер выполнит действие. Нужны SameSite Lax или Strict, CSRF-токен или проверка Origin. Запрос без CORS как раз уходит. PUT и DELETE из формы отправить нельзя, а fetch с ними вызовет preflight, но это не защищает POST. CORS касается всех методов.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме