Почему Spring Security SessionManagementFilter работает, когда моя политика создания сеанса установлена ​​на STATELESS? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть веб-приложение на основе J2EE REST, которое использует Spring Security 4.0.1.RELEASE.Я настраиваю Spring Security с помощью конфигурации на основе Java и установил политику создания сеанса STATELESS следующим образом:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(secureEnabled=true, prePostEnabled=true, jsr250Enabled=true, order=1)
public class DefaultSecurityBeansConfig extends WebSecurityConfigurerAdapter {
    // ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()...; // additional config omitted for brevity
        // ...
    }
    // ...
}

После прочтения этой статьи об управлении сеансами Spring Security, я считаю,что фильтр SessionManagementFilter должен не работать в цепочке фильтров Spring Security.Но это определенно так.Я могу установить точку останова в методе doFilter этого класса, и он запускается при каждом запросе к серверу.

Что здесь происходит?Тот факт, что этот фильтр работает, вызывает другое непредвиденное поведение в моем приложении, которое, как мне показалось, было настроено.

Спасибо.

1 Ответ

0 голосов
/ 13 июня 2018

При использовании Spring Security управление сеансом шире, чем сохранение аутентифицированного пользователя в сеансе (как описано в разделе Управление сеансами Руководства по безопасности Spring).

Функции, связанные с сеансами HTTP, обрабатываются комбинацией интерфейса SessionManagementFilter и SessionAuthenticationStrategy, которому делегируется фильтр.Типичное использование включает в себя предотвращение атак защиты с фиксацией сеансов, обнаружение тайм-аутов сеансов и ограничение количества одновременных открытий сеансов, которые может иметь аутентифицированный пользователь.

Сказать sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) не означает, что ваше приложение не имеет состояния, это означает, что Spring Security не будет создавать сеанс.Если в вашем приложении есть что-то еще, все еще создающее сеанс, Spring Security попытается защитить его от атаки с фиксацией сеанса.

Как выполняется атака с фиксацией сеанса, зависит от настроенной стратегии;по умолчанию изменяется идентификатор сеанса при каждом запросе.В Servlet 3.1 и более новых контейнерах ChangeSessionIdAuthenticationStrategy является значением по умолчанию, если не была сделана явная настройка.В Servlet 3.0 и ниже по умолчанию используется migrateSession.

Вы можете отключить защиту от фиксации сеанса, выполнив sessionFixation().none();однако вам нужно задаться вопросом, действительно ли это то, что вы действительно хотите, так как это потенциально делает ваше приложение менее безопасным.

В зависимости от того, какие сбои / сбои вы можете исправить, вместо того, чтобы сделать ваше приложение менее безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...