Я знаю
этот вопрос уже задавался много раз, но после нескольких часов поиска у меня все еще нет четкого ответа на мою проблему.
Даже такие проекты, как https://github.com/pillarjs/understanding-csrf были заброшены и не отвечали на новые вопросы и сомнения на протяжении многих лет, такие как this .
ПРОБЛЕМА
Допустим, у меня есть:
- серверная часть на
back.domain.com
и - входная на
front.domain.com
.
Мой бэкэнд представляет собой просто приложение nodejs со следующими конечными точками отдыха:
POST /login
:
- принимает тело JSON, например:
{"username": "myname", "password": "mypass"}
- проверить учетные данные
- , если OK дает 200 и создать cookie с сеансом
- , если NOT дает 401
GET /players
:
- проверка сеанса в cookie
- , если OK дает 200 с {"Players": "[. ..] "}
- если НЕ дает 401
POST /player/1
:
- проверка сеанса в cookie
- , если OK дает 200 и редактирование игрока
- , если NOT дает 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
?
- В этом сценарии в моем браузере по-прежнему нет файлов cookie сеанса.
- А также я не знаю, где взять мой токен CSRF для
X-CSRF-Token
заголовка авторизации.
Я читал https://fractalideas.com/blog/making-react-and-django-play-well-together-single-page-app-model, они создают выделенную конечную точку на бэкэндедля этого и они объясняют это не уязвимость безопасности.
О чем вы думаете?