Spring Security с CAS пропускает защиту от фиксации сеанса

У меня есть приложение, которое использует пружинную безопасность и CAS (весна 3.0.5, cas 3.4.5), но когда я вхожу в систему, идентификатор сеанса не меняется.

Когда я вхожу в систему, CasAuthenticationFilter выполняет аутентификацию, и если аутентификация прошла успешно, она не продолжает цепочку фильтров, вместо этого она устанавливает аутентификацию на SecurityContextHolder и вызывает SuccessHandler. Это перенаправляет на исходный URL-адрес, который я запросил, который требовал аутентификации. SessionManagementFilter никогда не получит трещину, вызывающую стратегию сеанса для создания нового сеанса.

Похоже, что AbstractAuthenticationFilter, который расширяет CasAuthenticationFilter, имеет свою собственную стратегию сеанса, но по умолчанию используется NullAuthenticatedSessionStrategy, который уязвим для фиксации сеанса. Вопрос в том, почему стратегия по умолчанию уязвима, когда spring предотвращает фиксацию сеанса по умолчанию?

Какое лучшее разрешение, чтобы исправить это?


person Qwerky    schedule 25.01.2013    source источник
comment
Привет, вы говорите о CasAuthenticationFilter на сервере CAS, который определен в securityContext.xml ИЛИ о том, что находится в плагине spring-security cas/core?   -  person sAaNu    schedule 24.12.2013


Ответы (2)


Стратегия фиксации сеанса автоматически устанавливается только при использовании пространства имен. Если вы используете явный фильтр, вы можете просто ввести SessionFixationProtectionStrategy в фильтр самостоятельно. В качестве альтернативы, если в вашем приложении есть очевидная отправная точка после аутентификации, вы можете просто воссоздать сеанс там.

Версия фиксации сеанса, вероятно, не установлена ​​по умолчанию по историческим причинам, поскольку фильтры появились раньше, чем стратегия аутентификации сеанса, а изменения обычно вносятся консервативно. Вы можете открыть запрос на изменение, чтобы предположить, что это может быть лучше по умолчанию.

person Shaun the Sheep    schedule 31.01.2013
comment
Спасибо за ответ. Я исправил, как вы предложили, явно внедрив SessionFixationProtectionStrategy в мой фильтр cas. Я предлагаю сделать это по умолчанию. - person Qwerky; 31.01.2013

У меня такая же проблема. Я решил эту проблему, явно внедрив SessionFixationProtectionStrategy (конфигурация на основе пространства имен, похоже, не работает с моим пользовательским фильтром CAS). Это моя текущая конфигурация:

<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>

<bean id="sessionControlStrategy" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
    <constructor-arg ref="sessionRegistry"/>
    <property name="maximumSessions" value="2"/>
</bean>

<bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="sessionAuthenticationStrategy" ref="sessionControlStrategy"/>
</bean>
person aaguilera    schedule 12.12.2013