ASP.NET Core 11 では、静的サーバー側レンダリング (SSR) エンドポイントBlazor、偽造防止トークン自体を検証しなくなりました。 検証結果を記録するために偽造防止ミドルウェアに依存し、トークン ベースの偽造防止ミドルウェアがパイプラインに存在する場合にのみ、偽造防止トークンを生成します。
導入されたバージョン
.NET 11
以前の動作
以前は、 Blazor SSR エンドポイントがフォーム POSTを処理したとき、 Razor Components エンドポイントは要求自体を検証しました。 アップストリームの偽造防止ミドルウェアがまだ結果を記録していない場合、エンドポイントは要求の偽造防止トークンを検証するために直接 IAntiforgery 呼び出されます。 また、エンドポイントは、パイプライン内に app.UseAntiforgery() されているかどうかに関係なく、レンダリングされたフォームの偽造防止トークンを常に生成して格納します。
その結果、Blazorを呼び出さなかったapp.UseAntiforgery() SSR アプリでは、そのフォームの投稿がエンドポイントによって偽造防止トークンに対して検証され、そのフォームに対して引き続きトークンが出力されていました。
新しい動作
ASP.NET Core 11 以降、Razor コンポーネント エンドポイントは、アップストリーム ミドルウェアによって要求のIAntiforgeryValidationFeatureに記録された偽造防止の判定を信頼します。 フォーム POSTでは、記録された判定が無効な場合にのみ 400 Bad Request が返され、要求自体を検証するために IAntiforgery が呼び出されなくなります。 エンドポイントは、トークン ベースの偽造防止ミドルウェアが要求に対して実行された場合にのみ、偽造防止トークンを生成します。そのミドルウェアが存在しない場合、エンドポイントはトークンの生成をスキップします。
判定は、次の 2 つのミドルウェア コンポーネントのいずれかで記録できます。
-
app.UseAntiforgery()によって追加されるトークンベースの偽造防止ミドルウェア。 -
WebApplication.CreateBuilder(.NET 11 の新機能) で構築されたアプリに既定で挿入される自動クロスオリジン CSRF 保護ミドルウェア。
影響は、アプリの構成によって異なります。
-
app.UseAntiforgery()を呼び出すアプリは影響を受けません。 要求は偽造防止トークンに対して検証され、以前とまったく同じようにフォームに対してトークンが生成されます。 -
app.UseAntiforgery()を呼び出さないアプリは、エンドポイントでのトークン検証ではなく、自動 CSRF 保護ミドルウェアによって保護されるようになりました。 これらのアプリは、フォームの偽造防止トークンを出力しなくなりました。
破壊的変更の種類
この変更は 動作の変更です。
変更理由
トークンベースの偽造防止システムと新しいクロスオリジン CSRF 保護により、共有 IAntiforgeryValidationFeatureに 1 つの検証結果が記録されるようになりました。この検証結果は、フォーム消費コンポーネントが読み取って要求を拒否するかどうかを決定します。
Razor Components エンドポイントでリクエストをもう一度検証すると、その作業が重複し、ミドルウェアの結果と異なる結果を生じる可能性がありました。 偽造防止ミドルウェアが存在しなかったときにトークンを生成すると、何も検証されないトークンが生成されます。
詳細については、 dotnet/aspnetcore#67082 を参照してください。
推奨されるアクション
Blazor SSR アプリが偽造防止トークン (フォームの投稿の検証やフォームへのトークンのレンダリングなど) に依存している場合は、app.UseAntiforgery()を呼び出していることを確認します。
var app = builder.Build();
app.UseAntiforgery();
app.UseAntiforgery()を介して直接または暗黙的にAddRazorComponentsを呼び出すアプリでは、変更は必要ありません。
意図的に app.UseAntiforgery() を削除し、代わりに自動クロスオリジン CSRF 保護に依存する場合は、アクションは必要ありません。 フォームに対して偽造防止トークンが生成されなくなり、クロスオリジン フォームの投稿はトークンではなく Sec-Fetch-Site と Origin に基づいて拒否されます。 詳細については、「ASP.NET Coreでのクロスサイト リクエスト フォージェリ (XSRF/CSRF) 攻撃の防止」および「.NET 10 の ASP.NET Coreから .NET 11 の ASP.NET Coreへの移行」を参照してください。
影響を受ける API
なし。 パブリック API サーフェスは変更されません。 この変更は、 Blazor 静的サーバー側レンダリング エンドポイントと、トークンを生成する偽造防止状態プロバイダーの動作に影響します。
ASP.NET Core