Будут ли файлы cookie хранилища токенов Spring Security CSRF автоматически работать для всех Ajax-запросов?

#angularjs #ajax #http #spring-security #csrf

#angularjs #ajax #http #spring-безопасность #csrf

Вопрос:

Я просматриваю следующее руководство по безопасности, и оно настраивает CsrfTokenRepository примерно так:

 .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
 

Это все, что требуется, чтобы запросы Ajax работали во всех библиотеках? В документации Angular для $http говорится, что Angular считывает файл cookie CSRF, который предоставляет Spring, и устанавливает соответствующий заголовок a при выполнении запросов. Итак, я предполагаю, что это происходит потому, что файл cookie не будет автоматически включаться при отправке Ajax-запросов?

[Обновление]

Я снова прочитал статью, и в ней говорится, что защита CSRF обеспечивается header . Итак, если я правильно это интерпретирую, то тот факт, что клиент отправляет обратно значение cookie уникальным способом, отличным от того, который был отправлен в первую очередь, обеспечивает защиту CSRF. Другими словами, клиент получает файл cookie и изменяет способ его отправки обратно, чтобы сервер знал, что клиент действительно контролирует файл cookie?

Ответ №1:

Защита CSRF с помощью Spring CookieCsrfTokenRepository работает следующим образом:

  1. Клиент отправляет запрос GET на сервер (серверную часть Spring), например, запрос на главную страницу
  2. Spring отправляет ответ на запрос GET вместе с заголовком Set-cookie, который содержит надежно сгенерированный токен XSRF
  3. Браузер устанавливает файл cookie с помощью токена XSRF
  4. При отправке запроса на изменение состояния (например, POST) клиент (Angular) копирует значение cookie в заголовок HTTP-запроса
  5. Запрос отправляется как с заголовком, так и с файлом cookie (браузер автоматически прикрепляет файл cookie)
  6. Spring сравнивает заголовок и значения cookie, если они совпадают, запрос принимается, в противном случае 403 возвращается клиенту

Обратите внимание, что только запросы на изменение состояния (POST, PUT, DELETE) по умолчанию защищены CSRF, и только они должны быть защищены при правильном проектировании API (т. Е. Запросы GET не имеют побочных эффектов и, например, изменяют состояние приложения).

Метод withHttpOnlyFalse позволяет angular считывать файлы cookie XSRF. Убедитесь, что Angular выполняет запрос XHR с withCreddentials установленным флагом true.