Я знаю
этот вопрос уже задавался так много раз, но после нескольких часов поиска у меня все еще нет четкого ответа на мою проблему.
Даже такие проекты, как https://github.com/pillarjs/understanding-csrf, были заброшены и не ответили на новые вопросы и сомнения, подобные этому.
ПРОБЛЕМА
Допустим, у меня есть:
- серверная часть на
back.domain.com
и - интерфейс на
front.domain.com
.
Моя серверная часть представляет собой простое приложение nodejs со следующими конечными точками:
POST /login
:- accepts JSON body like:
{"username": "myname", "password": "mypass"}
- проверить учетные данные
- если OK дает 200 и создает куки с сеансом
- если НЕ дает 401
- accepts JSON body like:
GET /players
:- check session in cookie
- если OK дает 200 с {"players": "[...]"}
- если НЕ дает 401
POST /player/1
:- check session in cookie
- если OK дает 200 и редактирует игрока
- если НЕ дает 401
Мое внешнее приложение имеет:
/login
страница с формой (с полямиusername
иpassword
) для оформленияPOST
запроса кback.domain.com/login
/players
которые запрашиваютGET
запрос кback.domain.com/players
кнопка, которая отправляет
POST
запросback.domain.com/player/1
ВОПРОСЫ
Нужна ли мне защита от CSRF в этом сценарии?
Я думаю ДА, мне нужно, потому что злоумышленник может отправить запрос к
back.domain.com/player/1
изmalicious.site.com
и использовать мой файл cookie сеанса для редактирования игрока, потому что я вошел в систему (и у меня все еще есть файл cookie сеанса) на моемdomain.com
.Нужна ли мне защита от CSRF (например, заголовок
X-CSRF-Token
) при первом входе в системуback.domain.com/login
?- In this scenario I still don't have any session cookie in my browser.
- А также я не знаю, где взять мой CSRF-токен для заголовка авторизации
X-CSRF-Token
.
Я читал на https://fractalideas.com/blog/making-react-and-django-play-well-together-single-page-app-model они создают специальную конечную точку на сервере для этого и они объясняют это не уязвимость безопасности.
О чем вы думаете?