Согласно docs.microsoft.com Ядро ASP.NET реализует шаблон маркеров синхронизатора для уменьшения CSRF.
Механизм защиты от подделки запросов имеет много недостатков, влияющих на пользователей:
ex 1: страница входа открыта в 2 вкладках
- Открыть страницу входа в систему на двух разных вкладках
- Журналы пользователя A со вкладки 1 (без проблем)
- Не обновляя вкладку 2, пользователь B пытается войти в систему.
=> Создает страницу 400 с AntiforgeryValidationException
ссылка 1 , ссылка 2
ex 2: форма, открытая в 2 вкладках (по той же ссылке в письме)
- Создание нового веб-сайта Asp.Net Core MVC из шаблона (VS 2019)
- Создать новую страницу, которая имеет простую форму, которая проверяется с помощью [ValidateAntiForgeryToken] в сообщении.
- Отправьте себе ссылку на эту страницу по электронной почте (я использовал Gmail & Mailtrap)
- Откройте ссылку в двух вкладках, нажав на нее обычно
- Отправить обеorms в любом порядке
=> Открытая форма FIRST выдает ошибку 400
ссылка
Похоже на SameSite = строгийявляется эффективной мерой защиты от CSRF-атак
Согласно этой статье и данного проекта RFC , файл cookie SameSite представляется эффективной и надежной мерой защиты от CSRF-атак. Файл cookie проверки подлинности в ASP.NET Core 2.2 настроен с параметром SameSite = strict. Если мое понимание правильное, куки-файлы аутентификации отправляются на сервер только в ситуации навигации на одном сайте.
Поэтому, если я могу гарантировать, что мои пользователи используют браузер, поддерживающий политику SameSite, безопасно ли отключитьмеханизм защиты от CSRF моего приложения ASP.NET Core?