Spring security: активация csrf отключает / выходит из системы - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь включить защиту csrf, но только для страницы входа. Я добавил следующую весеннюю конфигурацию безопасности (тег <http> уже существовал)

<http ... >
  <sec:csrf request-matcher-ref="myBean" />
  ...
</http>

<bean id="myBean" class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
  <constructor-arg name="pattern" value="/login"/>
  <constructor-arg name="httpMethod" value="POST"/>
</bean>

Страница входа теперь действительно имеет защиту csrf. Однако по странной причине /logout теперь выдает ошибку 404. Фактически, если я заменю /login на /foobar, у меня все равно будет ошибка 404 при выходе из системы. Но если я добавлю disabled="true" в тег <sec:csrf/>, он снова будет работать.

Есть идеи почему?

Спасибо

1 Ответ

1 голос
/ 23 января 2020

Если csrf включен, запрос POST выполняет выход из системы, как сказано в этом вопросе. Может быть, это ( Выход из системы не работает в Spring Security ) может помочь.

В https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#servlet -considerations-csrf-logout сказано, что:

Если защита CSRF включена (по умолчанию), LogoutFilter Spring Security обрабатывает только HTTP POST. Это гарантирует, что для выхода требуется токен CSRF и что злонамеренный пользователь не сможет принудительно выйти из системы ваших пользователей. Самый простой подход - использовать форму для выхода из системы. Если вам действительно нужна ссылка, вы можете использовать JavaScript, чтобы ссылка выполняла POST (то есть, возможно, в скрытой форме). Для браузеров с JavaScript, который отключен, вы можете при желании сделать так, чтобы ссылка перенаправляла пользователя на страницу подтверждения выхода из системы, которая будет выполнять POST.

В этом разделе также объясняется, как выполнить HTTP GET запрос на выход из системы, хотя обычно это не рекомендуется.

...