Как установить максимальный возраст для файла cookie XSRF-Token, генерируемого при весенней загрузке - PullRequest
0 голосов
/ 02 февраля 2019

Я включаю защиту csrf и устанавливаю файл cookie XSRF-TOKEN, используя весеннюю загрузку

В браузере я вижу, что файл cookie установлен так, как ожидалось, но без лишних усилий.У меня есть эти вопросы

  1. Есть ли способ, которым я могу установить максимальный возраст для этого куки или сделать так, чтобы он истекал после окончания сеанса?
  2. Стоит ли хранить токен XSRF в сеансе вместо cookie для повышения безопасности?
  3. Каков наилучший способ защиты CSRF с помощью AngularJS в качестве внешнего интерфейса и Springboot в качестве резервного?

вот мой код весенней загрузки

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
    .antMatchers("/**").permitAll()
    .and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}

1 Ответ

0 голосов
/ 06 февраля 2019

Есть ли способ, которым я могу установить максимальный возраст для этого куки или сделать так, чтобы он истек после истечения сеанса?

Не должно быть необходимости изменять максимальный возраст кукипотому что по умолчанию CookieCsrfTokenRepository создает его так, чтобы оно не сохранялось постоянно.Обычно он удаляется при закрытии браузера:

cookie.setMaxAge(-1);

Но если вы ДЕЙСТВИТЕЛЬНО хотите изменить его, вам придется написать собственную реализацию CsrfTokenRepository, потому что хотя было бы неплохо простопереопределить saveToken(...) метод CookieCsrfTokenRepository, вы не можете, потому что это final класс.Вместо этого вы могли бы использовать состав и иметь делегат вашей реализации в объекте CookieCsrfTokenRepository для каждого вызова метода, кроме saveToken(...), где вы должны были бы написать свою собственную логику cookie.Затем добавьте его в свой WebSecurityConfigurerAdapter:

protected void configure(HttpSecurity http) throws Exception {
    http.
    ...
    .and().csrf()
    .csrfTokenRepository(new MyCustomCookieCsrfTokenRepository());
}

Опять дважды подумайте, нужно ли это.

Должен ли я хранить токен XSRF в сеансе вместо cookieдля большей безопасности?

Что ж, если кто-то может украсть ваши куки, теоретически они могут украсть и вашу сессию.Если вы можете поддерживать состояние на сервере для значения cookie, тогда продолжайте.Но если нет, придерживайся печенья.Spring Security позаботится о деталях.

Каков наилучший способ защиты CSRF с помощью AngularJS в качестве внешнего интерфейса и Springboot в качестве резервного?

Один из подходов заключается в отправкеCRSF-токен как файл cookie, и приложение ANgularJS отправляет токен обратно в заголовок «X-XSRF-TOKEN» или в качестве параметра запроса с именем «_csrf».

Если вы хотите сохранитьЗначение CSRF в сеансе, вы должны иметь способ, чтобы ваше приложение AngularJS знало об этом.Традиционно, в одностраничной настройке вы записываете ее в форму как скрытый параметр.Но поскольку это не ваш случай, вы можете использовать cookie.

...