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 и параметров:

  • setAllowedOrigins
  • setAllowedMethods
  • setAllowedHeaders
  • setAllowCredentials(true)

Важный нюанс: подробно разобран конфликт wildcard-символа * в комбинации с setAllowCredentials(true).

🛠 Код конфигурации

В редакторе ВК вставь этот блок через элемент «Код» (значок </> в меню добавления нового блока):

Spring Security: CSRF и CORS атаки — разбор с примерами конфигурации SecurityFilterChain, image #1

Подключение в цепочке фильтров SecurityFilterChain:

.cors(cors -> cors.configurationSource(corsConfigurationSource()))

💡 Почему прокси CGLIB спасает

Маленький, но важный нюанс: почему @Bean-метод, вызванный изнутри того же @Configuration-класса, возвращает тот же самый инстанс (Singleton), и почему это штатное поведение Spring, а не баг.

Почему это стоит прочитать?

В отличие от многих «Hello, world»-гайдов по Spring Security, тут акцент сделан не на «какой бин куда вставить», а на модель угроз:

  1. Сначала ты понимаешь, как работают атаки.
  2. И только потом — какой именно конфиг тебя от них защищает.

Плюс разобраны современные нюансы: JWT vs Cookie и тонкости setAllowCredentials(true), на которых чаще всего и спотыкаются разработчики.

🔗 Ссылки на материалы:

💬 А у вас в проектах csrf.disable() — это осознанное решение или «потом разберусь»? Делитесь в комментариях к посту — посмотрим, у кого какой сетап.

6 views·1 share