Когда CSRF-защита нужна в Spring 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?
Разбор темы
- Spring Security: фильтр-цепочка и авторизация
SecurityFilterChain, аутентификация (UserDetailsService/PasswordEncoder), SecurityContext, авторизация запросов и CSRF/CORS/сессии.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.