Вопрос с собеседования · Spring

Когда CSRF-защита нужна в Spring Security, а когда её часто отключают?

MiddleSpring Security
Ещё спрашивают так:
  • Нужно ли отключать CSRF для REST API?
Коротко

CSRF-защита нужна, когда браузер сам прикладывает учётные данные — cookie сессии. Для stateless API с токеном в заголовке Authorization её обычно отключают: браузер не подставит такой заголовок на чужом сайте.

  • Spring Security включает CSRF по умолчанию для изменяющих методов
  • SPA с cookie-сессией — CookieCsrfTokenRepository и заголовок X-XSRF-TOKEN
  • SameSite=Lax у cookie — дополнительный слой, но не повод отключать защиту

А ещё JWT в cookie — CSRF снова актуален

Подробно

Атака: пользователь вошёл на ваш сайт (есть cookie сессии), открыл страницу злоумышленника, та отправила форму POST /transfer на ваш сайт. Браузер приложил cookie — запрос выполнен от имени пользователя.

Когда защита нужна: аутентификация через cookie — сессия, JWT в cookie, Basic auth в браузере. Spring Security требует CSRF-токен в изменяющих запросах (POST, PUT, PATCH, DELETE): токен выдаётся в форме или cookie и должен вернуться в параметре или заголовке.

SPA с cookie-сессией: CookieCsrfTokenRepository.withHttpOnlyFalse() — токен в cookie XSRF-TOKEN, JavaScript читает его и отправляет в заголовке X-XSRF-TOKEN. В Spring Security 6 токен по умолчанию маскируется (защита от BREACH) — для SPA нужен соответствующий обработчик запроса.

Когда отключают: API для мобильных и сервисных клиентов с токеном в заголовке Authorization: Bearer и без cookie-сессий (SessionCreationPolicy.STATELESS). Браузер такой заголовок на межсайтовый запрос сам не подставит — атаке нечего использовать.

Ошибка — отключить CSRF «потому что мешает», оставив аутентификацию по cookie.

Что хотят услышать

  • Механика CSRF и роль cookie.
  • Когда защита нужна и когда её отключают.
  • SPA и CookieCsrfTokenRepository.

Частые ошибки

  • Отключать CSRF при cookie-сессии.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Нужна для cookie-сессий; в stateless bearer-API её обычно отключают
  • ✗Нужна только для GET-запросов, а POST и PUT уже защищены самим браузером
  • ✗Нужна всегда и везде без исключений
  • ✗Отключать нужно всегда ради производительности

Что спросят дальше

  • Чем CSRF отличается от XSS?
  • Что делает SameSite cookie?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования