Защита веб-приложения от CSRF-атак с помощью Spring Security - PullRequest
0 голосов
/ 18 апреля 2019

Я реализую защиту CSRF в своем веб-приложении.

Я использовал класс org.springframework.security.web.csrf.CookieCsrfTokenRepository для генерации токена X-XSRF.Этот токен отправляется как cookie в ответе на каждый запрос.

Компонент пользовательского интерфейса, который представляет собой одностраничное приложение, развернутое на другом сервере, считывает этот cookie и считывает маркер X-XSRF из cookie и устанавливает его как заголовок во всехпоследующие запросы.

Spring проверяет полученный токен X-XSRF и разрешает / отклоняет запрос.Это отлично работает.

Но это ограничение, которое должен иметь этот файл cookie X-XSRF httpOnly, равный false, чтобы клиентский JavaScript мог его прочитать.

Мы не можем прочитать файл cookie, для которого httpOnly is true.

Существует ли какая-либо другая альтернатива для защиты CSRF веб-приложения в веб-приложении, где cookie-токен X-XSRF httpOnly равен true.

с использованием метода JavaScript (document.cookie) Я не могу прочитать файлы cookie, для которых атрибут httpOnly имеет значение true, см.

Я не могу внести изменения всделайте все куки, как httpOnly, это false в Websphere.

Или я что-то упускаю, когда клиентский JavaScript может прочитать куки, который httpOnly равен true.

1 Ответ

2 голосов
/ 18 апреля 2019

См. Справочник по безопасности Spring :

CookieCsrfTokenRepository

В некоторых случаях пользователи могут захотеть сохранить CsrfTokenв печенье.По умолчанию CookieCsrfTokenRepository записывает в файл cookie с именем XSRF-TOKEN и считывает его из заголовка с именем X-XSRF-TOKEN или параметра HTTP _csrf.Эти значения по умолчанию исходят из AngularJS

. Вы можете настроить CookieCsrfTokenRepository в XML, используя следующее:

<http>
    <!-- ... -->
    <csrf token-repository-ref="tokenRepository"/>
</http>
<b:bean id="tokenRepository"
    class="org.springframework.security.web.csrf.CookieCsrfTokenRepository"
    p:cookieHttpOnly="false"/>

В примере явно указывается cookieHttpOnly=false.Это необходимо для того, чтобы JavaScript (т.е. AngularJS) мог его прочитать.Если вам не нужна возможность напрямую читать cookie с помощью JavaScript, рекомендуется опустить cookieHttpOnly=false для повышения безопасности.

Вы можете настроить CookieCsrfTokenRepository в конфигурации Java, используя:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}

Образец явно устанавливает cookieHttpOnly=false.Это необходимо для того, чтобы JavaScript (т.е. AngularJS) мог его прочитать.Если вам не нужна возможность напрямую читать cookie с помощью JavaScript, рекомендуется опустить cookieHttpOnly=false (используя вместо этого новый CookieCsrfTokenRepository()) для повышения безопасности.

...