Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В ASP.NET Core 11 Blazor статические конечные точки отрисовки на стороне сервера (SSR) больше не проверяют сами маркеры антифоргерии. Они полагаются на промежуточное ПО защиты от подделки запросов для записи результата проверки и создают токены защиты от подделки запросов только в том случае, если в конвейере присутствует промежуточное ПО защиты от подделки запросов на основе токенов.
Представленная версия
.NET 11
Предыдущее поведение
Ранее, когда конечная Blazor точка SSR обрабатывала форму POST, Razor конечная точка компонентов проверила сам запрос. Если предшествующее промежуточное ПО для защиты от подделки запросов ещё не сохранило результат, конечная точка напрямую вызывала IAntiforgery для проверки токена защиты от подделки запроса. Конечная точка доступа также всегда создавала и сохраняла antiforgery-токены для отображаемых форм независимо от того, был ли app.UseAntiforgery() в конвейере.
В результате приложение SSR Blazor, которое не вызывало app.UseAntiforgery(), всё равно проверяло отправки форм конечной точкой на соответствие токенам защиты от подделки запросов и по-прежнему генерировало токены для своих форм.
Новое поведение
Начиная с ASP.NET Core 11, конечная точка Components доверяет результату проверки antiforgery, записанному в Razor запроса вышестоящим промежуточным ПО IAntiforgeryValidationFeature. Для формы POST он возвращает 400 Bad Request только в том случае, если записанный вердикт недействителен, и больше не вызывает IAntiforgery для проверки самого запроса. Конечная точка создает токены защиты от подделки только в том случае, если для этого запроса было выполнено промежуточное ПО защиты от подделки на основе токенов; если это промежуточное ПО отсутствует, конечная точка пропускает создание токенов.
Вердикт может быть записан двумя компонентами ПО промежуточного слоя:
- промежуточное ПО для защиты от подделки на основе токенов, которое добавляет
app.UseAntiforgery() - Промежуточное ПО для автоматической межсайтовой защиты от CSRF, которое по умолчанию внедряется в приложения, созданные с помощью
WebApplication.CreateBuilder(новое в .NET 11).
Влияние зависит от конфигурации приложения:
- Приложения, которые вызывают
app.UseAntiforgery(), не затронуты. Запросы проверяются с использованием токенов защиты от подделки запросов, а для форм токены создаются, как и прежде. - Приложения, которые не вызывают
app.UseAntiforgery(), теперь защищаются промежуточным ПО автоматической защиты от CSRF, а не проверкой токенов в конечной точке. Эти приложения больше не выдают маркеры антифоргерии для их форм.
Тип разрушающего изменения
Это изменение поведения.
Причина изменения
Система защиты от подделки запросов на основе токенов и новая защита CSRF для междоменных запросов теперь сохраняют единый результат проверки в общем IAntiforgeryValidationFeature, который считывают компоненты, обрабатывающие формы, чтобы определить, следует ли отклонить запрос. То, что Razor конечная точка Components во второй раз проверяла запрос, дублировало эту работу и могло привести к результату, отличающемуся от результата промежуточного ПО. Генерация токенов при отсутствии middleware защиты от подделки запросов приводила к созданию токенов, которые ничто не проверяло.
Дополнительные сведения см. в статье dotnet/aspnetcore#67082.
Рекомендуемое действие
Если ваше приложение Blazor SSR использует токены защиты от подделки — например, для проверки отправки форм или встраивания токенов в формы, — убедитесь, что оно вызывает app.UseAntiforgery():
var app = builder.Build();
app.UseAntiforgery();
Приложения, которые вызывают app.UseAntiforgery() напрямую или косвенно через AddRazorComponents, не требуют изменений.
Если вы намеренно удалили app.UseAntiforgery() и хотите полагаться на автоматическую защиту CSRF между источниками, то никаких действий не требуется. Обратите внимание, что токены защиты от подделки больше не создаются для ваших форм, а межсайтовые отправки форм отклоняются на основе Sec-Fetch-Site и Origin, а не токенов. Дополнительные сведения см. в статьях Предотвращение атак с подделкой межсайтовых запросов (XSRF/CSRF) в ASP.NET Core и Переход с ASP.NET Core в .NET 10 на ASP.NET Core в .NET 11.
Затронутые API
Нет. Область общедоступного API не изменилась. Это изменение влияет на поведение статических Blazor конечных точек отрисовки на стороне сервера и поставщика состояния защиты от подделки, который создает маркеры.
ASP.NET Core