Безопасность в Spring Boot 4: Что нужно знать, чтобы не словить взлом
Вышел Spring Security 7 (который идет внутри Boot 4), и настройки защиты изменились. Вот главное, что нужно проверить в своем коде.
1. OAuth стал проще через Authentication Bundles
Новая версия принесла «Пакеты аутентификации». Раньше для подключения входа приходилось писать кучу однотипного кода. Теперь всё делается одной строчкой:
`oauth2Login(withDefaultProvider())`
Настройка стандартных провайдеров стала автоматической — Спринг сам знает нужные ссылки и параметры. Если вы используете Keyclozation (Keycloak) или отечественные системы управления доступом (например, ALM), подключение корпоративного SSO теперь выглядит так же просто:
`oauth2Login(withCustomProvider("keycloak"))`.
2. Криптография по умолчанию стала сильнее
Вам больше не нужно думать, какой алгоритм хеширования выбрать для паролей. В новой версии старые и слабые методы отключены на уровне фреймворка. Если вы хранили пароли как-то небезопасно, приложение может просто упасть при старте с ошибкой миграции. Это сделано специально, чтобы разработчики перешли на современные стандарты Argon2 или BCrypt.
3. SameSite и CSRF: защита от кражи кук
Браузеры стали намного строже относиться к кукам (cookies). Раньше ваш сайт могли обманом заставить отправить запрос на удаление профиля пользователя из другого окна.
Теперь настройки `SameSite` включены по умолчанию более жестко. Если у вас мобильное приложение общается с бэкендом, проверьте CORS-настройки — они могут начать блокировать запросы, которые раньше проходили.
4. Authorization Server 2.0
Если вы пишете свой собственный сервер авторизации (чтобы выдавать токены другим сервисам), то теперь это делать гораздо легче. Появился модуль Spring Authorization Server 2.0. Он поддерживает самые свежие стандарты RFC, и его настройка занимает считаные минуты вместо часов копания в документации.
5. Удаление старого API
Многие старые классы и константы удалили. Если ваша конфигурация безопасности написана давно, она может не скомпилироваться. Чаще всего ломаются ручные настройки YAML-файлов и свойств (`application.properties`) — названия ключей немного поменялись.
Совет перед обновлением:
Не меняйте версию Спринга в пятницу вечером🫣.
Сначала запустите проект на новой версии без изменения своего кода. Скорее всего, он сразу скажет вам в консоль, какие именно настройки безопасности устарели и что нужно исправить.