Возможна ли противодействие XSRF: Asp.Net Core 2 WebApi (не MVC) + отдельный Сервер для Angular? - PullRequest
0 голосов
/ 14 декабря 2018

Я использую Asp.Net Core Webapi 2 без статического содержимого в качестве внутреннего сервера + nginx на отдельной машине для обслуживания приложения Angular 7.Вот вопрос: имеет ли смысл пытаться использовать противоугонную защиту xrsf, такую ​​как services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");, в случае расщепления задней и передней машин?Насколько я понимаю, мне нужно управлять каким-то состоянием между этими двумя серверами, чтобы предоставить соответствующий файл cookie от Nginx, который будет принимать внутренний сервер.

1 Ответ

0 голосов
/ 14 декабря 2018

Если я правильно понял вопрос, вы хотите знать, как защитить ваше веб-приложение от CSRF-атаки.

Ваши API-интерфейсы размещены на бэкэнд-веб-сервере, тогда как статическое содержимое Angular размещено в nginx.

Идея объяснена в Angular docs .Вам нужно установить cookie XSRF-TOKEN (имя по умолчанию) в ответе REST аутентификации.Файл cookie должен быть secure, но читаемым с использованием javascript (не httpOnly).Вы можете установить значение cookie на что-то уникальное для пользовательской сессии (в идеале криптографически генерируемое случайное число).Здесь и далее в каждом последующем запросе Angular HttpClient будет отправлять значение cookie в заголовке запроса X-XSRF-TOKEN, и сервер должен проверить правильность значения cookie и значения заголовка запроса.Обратите внимание, что cookie маркера доступа также будет сопровождать запрос (как обычно при аутентификации на основе токенов).Таким образом, при каждом действительном вызове API ваш веб-сервер будет получать токен доступа в заголовке cookie и значение cookie XSRF в настраиваемом заголовке XSRF и заголовке cookie XSRF.Если заголовок XSRF отсутствует или значения не совпадают, сервер отклоняет запрос.

Итак, решение не имеет состояния и управляется путем сохранения значений в cookie, которые сопровождают каждый запрос (если только вы не поддерживаете cookie XSRFзначение на сервере для более строгой проверки).

В вашей настройке файл cookie, установленный сервером, не будет виден статическим файлам Angular, обслуживаемым nginx, из-за политики одного источника.Однако вы можете решить эту проблему одним из следующих способов:

  1. Если к вашему веб-API-серверу и статическому файловому серверу обращаются по разным IP-адресам (например, 172.168.1.1 и 172.168.2.2) илиразные домены (скажем, webapi.com или static.com), вам нужно настроить сервер web api, чтобы в ответе были установлены следующие заголовки, чтобы позволить статическому файловому серверу (172.168.2.2 или static.com) читать куки: Access-Control-Allow-Origin: https://static.com

  2. Если доступ к вашему веб-API-серверу и статическому файловому серверу осуществляется с использованием разных поддоменов (webapi.example.com & static.example.com), вы можете использовать любой из указанных выше подходов.или задайте домен при настройке cookie: Set-Cookie: name=value; domain=example.com

Вы также можете прочитать эту тему для CSRF

...