CSRF защита в Rest API

0

У меня возникла проблема с реализацией CSRF в проекте Symfony REST. Я использую AngularJS, AuthToken cookie AuthToken хранится с использованием сервиса NG $cookie и отправляется на сервер в каждом запросе в X-Auth-Token header, проблема в том, что мне действительно нужно реализовать защиту CSRF? Другой вопрос, если бы ответ был да, как я могу это сделать с Symfony? Поскольку он хранит токены в сеансах сервера, что не является RESTful, то какой лучший метод для реализации системы Django например CSRF например (я предполагаю, что они хранят токен CSRF в CSRF cookie, а затем сравнивают его с входным токеном формы? мой плохой английский, спасибо!

  • 1
    Токен CSRF используется для того, чтобы отрывочный скрипт или страница не могли отправить запрос на ваш сайт, когда сеанс открыт, поэтому вы используете токен CSRF, чтобы доказать, кто вы такой, кем вы себя называете. Если вы храните токен в своем приложении и затем отправляете его в каждом запросе, то нет необходимости использовать CSRF, поскольку вы подтверждаете, кто вы, используя свой токен аутентификации.
Теги:
csrf
rest

2 ответа

1

В основном вам нужна защита CSRF, когда злоумышленник (из собственного приложения) может заставить вашего пользователя непреднамеренно выдавать действительный запрос вашему приложению, который изменяет состояние сервера.

Короче говоря, это главным образом означает не-GET-запросы (если GET не изменяет материал, который они не должны) с аутентификацией на основе файлов cookie, поскольку куки будут отправляться, даже если запрос был сделан с другого веб-сайта.

Если у вас есть маркер доступа (используемый для аутентификации) в заголовке, вам нужно добавить его к запросам в приложении "Угловое", и злоумышленник не сможет этого сделать, поэтому вам не нужна защита CSRF.

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

0

Я думаю, что для вашего случая проще всего использовать этот комплект https://github.com/dunglas/DunglasAngularCsrfBundle, который был специально разработан для использования вашего прецедента.

В основном, как это работает:

  • Серверное приложение создает XSRF-TOKEN, сохраняет его в сеансе и отправляет его в качестве файла cookie в приложение "Угловое"
  • Угловое приложение читает файл cookie и устанавливает X-XSRF-TOKEN для будущих запросов
  • Сервер сравнивает X-XSRF-TOKEN при каждом запросе (используя прослушиватель запросов) со значением токена, хранящегося в сеансе

Если жетоны не совпадают, запрос терпит неудачу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню