Реализация CSRF в стеке MERN - PullRequest
2 голосов
/ 07 апреля 2020

Ниже приведена файловая структура моего проекта MERN.

|-Project
  |- client
  |- server

Папка клиента содержит реагирующий сервер. Клиент работает на localhost.client.com Папка сервера содержит код для сервера node.js. Сервер работает на localhost.server.com

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

1 Ответ

1 голос
/ 07 апреля 2020

Ваша проблема может быть рассмотрена в React-интерфейсе и REST API, CSRF .

. Есть отличная статья о CSRF и контрмерах (с Angular в виду, но это все та же проблема). TL / DR:

  • использовать тот же источник политики или установить Access-Control-Allow-Origin -заголовок при необходимости
  • сохранить XSRF-Token в качестве безопасного повара ie (к сожалению, для этого требуется запрос exta - в большинстве случаев). Только код из вашего домена может получить доступ к этому значению.
  • отправьте этот токен в виде X-XSRF-TOKEN значения заголовка вместе с вашим запросом на авторизацию запроса

Чтобы убедиться, что только ваше приложение Вы можете использовать API сервера. Вы можете установить значение Access-Control-Allow-Origin в заголовке ответа CORS / OPTIONS.

Во время разработки оно обычно устанавливается на
Access-Control-Allow-Origin: *

для производства вы указываете свой домен / имя сервера
Access-Control-Allow-Origin: localhost.client.com

Чтобы предотвратить подделку источника, вы можете использовать (Анти-) CSRF-токены. Это дополнительные значения, приложенные к вашему запросу, которые аутентифицируют ваш запрос. Это значение можно / нужно сохранить в безопасном режиме ie. csurf или JSON Веб-токены могут иметь отношение к вам. В вашем случае для CSRF-токенов может потребоваться дополнительный запрос к вашему API для запроса токена.

...