Spring Boot CSRF с CookieCsrfTokenRepository и httpOnly = true - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь настроить поддержку csrf с включенным HttpOnly в приложении Spring Boot, и у меня возникают некоторые проблемы с работой Spring CsrfFilter.

Во-первых, у меня настроены такие вещи, как:

 http
      .csrf()
        .csrfTokenRepository(new CookieCsrfTokenRepository())

И это очень близко подходит ко мне. При запросах GET, которые добавляют к ответу файл cookie XSRF-TOKEN, и браузер устанавливает его, а затем отправляет его в следующих запросах. Проблема возникает, когда я делаю запрос POST или что-то, что проходит эту строку из Spring CsrfFilter:

if (!this.requireCsrfProtectionMatcher.matches(request)) {
        filterChain.doFilter(request, response);
        return;
    }

После этого он получает код, который выглядит следующим образом:

    String actualToken = request.getHeader(csrfToken.getHeaderName());
    if (actualToken == null) {
        actualToken = request.getParameter(csrfToken.getParameterName());
    }
    if (!csrfToken.getToken().equals(actualToken)) {

Где csrfToken - токен, загруженный из репозитория Cookie.

Хотя это не имеет смысла для меня, потому что он явно пытается получить токен csrf из заголовка или если он недоступен из параметра запроса. Ни одну из тех вещей, которые я могу установить, когда делаю запрос, потому что это cookie-файл HttpOnly, поэтому я не могу получить к нему доступ из JavaScript.

Что авторы намеревались здесь? Я не могу найти хороших ресурсов, показывающих, как это должно быть сделано.

Вот класс для справки

...