Spring Security: CSRF и CORS атаки — разбор с примерами конфигурации SecurityFilterChain
📖 CSRF на пальцах
Понятное объяснение, почему cookie-сессия — это уязвимо, и каким звеном в цепочке атаки становится Same Origin Policy.
⚙️ Защита от CSRF в Spring Security
Три практичных сценария:
- JWT в заголовке
Authorization➔ вызовcsrf.disable()безопасен. - Сессии + cookies ➔ работа через
CookieCsrfTokenRepository.withHttpOnlyFalse()(фронтенд читает токен из cookie, бэкенд сверяет его в заголовке). - Краткое объяснение, почему именно браузер не даёт вредоносному скрипту утащить
XSRF-TOKEN.
🌐 CORS без боли
Пошаговая настройка CorsConfigurationSource и параметров:
setAllowedOriginssetAllowedMethodssetAllowedHeaderssetAllowCredentials(true)
Важный нюанс: подробно разобран конфликт wildcard-символа * в комбинации с setAllowCredentials(true).
🛠 Код конфигурации
В редакторе ВК вставь этот блок через элемент «Код» (значок </> в меню добавления нового блока):
Подключение в цепочке фильтров SecurityFilterChain:
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
💡 Почему прокси CGLIB спасает
Маленький, но важный нюанс: почему @Bean-метод, вызванный изнутри того же @Configuration-класса, возвращает тот же самый инстанс (Singleton), и почему это штатное поведение Spring, а не баг.
Почему это стоит прочитать?
В отличие от многих «Hello, world»-гайдов по Spring Security, тут акцент сделан не на «какой бин куда вставить», а на модель угроз:
- Сначала ты понимаешь, как работают атаки.
- И только потом — какой именно конфиг тебя от них защищает.
Плюс разобраны современные нюансы: JWT vs Cookie и тонкости setAllowCredentials(true), на которых чаще всего и спотыкаются разработчики.
🔗 Ссылки на материалы:
💬 А у вас в проектах csrf.disable() — это осознанное решение или «потом разберусь»? Делитесь в комментариях к посту — посмотрим, у кого какой сетап.
