Относительно межсайтовых скриптов - PullRequest
0 голосов
/ 04 сентября 2018

Я работаю над csrf и использую Spring 5. Spring 5 автоматически обеспечивает поддержку csrf и включает защиту csrf на стороне сервера. Я получаю

403: Invalid X-CSRF token

Значит, это означает, что токен должен прийти из внешнего интерфейса?

Насколько я понимаю, бэкэнд генерирует токен csrf и отправляет его в ответ веб-браузеру, а затем использует этот токен и отправляет его в виде файлов cookie на бэкэнд-сервер, а затем проверяет его. мое понимание верно?

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

Второй сценарий. Предположим, что два пользователя вошли на мой веб-сайт, и веб-интерфейс отправляет этот токен бэкенду, а затем, как приложение будет различать, какой токен для какого пользователя?

Также, пожалуйста, объясните, как это работает внутренне, означает, что мы включили защиту csrf в бэкэнде и вручную сгенерировали токен во внешнем интерфейсе, тогда что он делает за кулисами?

считаю, что мой интерфейс - JS pages

Есть ли какая-то специальность в Spring 5, которая заботится о сессиях для каждого пользователя и автоматически проверяет токены для каждого пользователя ?. Я пытался найти его на официальном сайте, но нигде не получил

1 Ответ

0 голосов
/ 04 сентября 2018

Привет, Zaib. Токен csrf генерируется из серверной части, как вы заявили, как только он генерируется, он автоматически отправляется клиенту, который должен позаботиться о получении из модели и повторной публикации для каждого запроса "POST". Вы можете поделиться токеном csrf другим способом, в основном я использовал заголовок или параметр html.

Токен относится к определенному сеансу, поэтому он не очень важен, если у вас есть зарегистрированный пользователь или нет, даже не прошедшие проверку подлинности пользователи должны отправить токен csrf для «POST».

Токен csrf проверяется с помощью фильтра, расположенного в начале цепочки фильтров, определяемой самой системой безопасности Spring. Если вы выполняете поиск в документации, появляется таблица, показывающая положение каждого фильтра «по умолчанию», включенного службой безопасности Spring. Более того, если вы включите отладку в Spring (достаточно </debug> в вашей конфигурации xml), вы распечатаете все фильтры, используемые при обработке запроса http. Поэтому каждый раз, когда запрос с методом «POST» проходит через этот фильтр, он проверяет, есть ли в параметрах токен или заголовок csrf.

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

Вот подробности реализации csrf на Spring: https://docs.spring.io/spring-security/site/docs/5.0.7.RELEASE/reference/htmlsingle/#csrf-configure

Я сказал метод "POST", но на самом деле токен проверяется на любой метод, связанный с изменением состояния, вы можете обратиться к документу здесь: https://docs.spring.io/spring-security/site/docs/4.2.5.RELEASE/apidocs/org/springframework/security/web/csrf/CsrfFilter.html

Надеюсь, что это поможет прояснить использование токена csrf.

...