Spring: как защитить страницу входа от csrf (без критических изменений)? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть проект Java, который использует Spring.

Мне нужно защитить страницу входа от CSRF-атак.

На данный момент мой конфигурационный файл Spring xml содержит

<http>
    ...
    <csrf disabled="true"/>
</http>

Из-за размера проекта я не могу позволить себе изменить все страницы и защитить их от CSRF прямо сейчас, но я бы хотел по крайней мере защитить эту, что, как мне кажется, один из самых важных. В частности, я не могу защитить конечную точку / logout, которая использует запрос GET (это было бы критическим изменением).

Как я могу просто защитить страницу входа без запроса выхода?

Я попытался сделать это:

<bean id="csrfMatcher" class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
    <constructor-arg name="pattern" value="/j_spring_security_check"/>
    <constructor-arg name="httpMethod" value="POST"/>
</bean>
<csrf request-matcher-ref="csrfMatcher" />

и добавить этот фрагмент кода в существующую форму входа:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

Однако это изменение также влияет на запрос выхода из системы, чего хотелось бы избежать.

Спасибо

1 Ответ

0 голосов
/ 09 июля 2020

при условии, что вы используете только эти 4 метода http (get, post, put, delete), это регулярное выражение игнорирует все пути, кроме входа

http.csrf(csrf -> csrf.ignoringRequestMatchers(new RegexRequestMatcher("^(?!/login).*", "get"),
                    new RegexRequestMatcher("^(?!/login).*", "post"),
                    new RegexRequestMatcher("^(?!/login).*", "delete"),
                    new RegexRequestMatcher("^(?!/login).*", "put")
                    ).disable());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...