Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In ASP.NET Core 11 überprüfen Blazor Endpunkte für statisches serverseitiges Rendern (SSR) Antifälschungstoken nicht mehr selbst. Sie verlassen sich auf die Antiforgery-Middleware, um ein Validierungsergebnis aufzuzeichnen, und sie generieren Antiforgery-Token nur, wenn die tokenbasierte Antiforgery-Middleware in der Pipeline vorhanden ist.
Eingeführt in Version
.NET 11
Bisheriges Verhalten
Wenn ein Blazor-SSR-Endpunkt zuvor ein Formular POST verarbeitet hat, validierte der Razor-Komponentenendpunkt die Anfrage selbst. Wenn die vorgelagerte Fälschungsschutz-Middleware noch kein Ergebnis erfasst hatte, rief der Endpunkt IAntiforgery direkt auf, um das Fälschungsschutz-Token der Anfrage zu überprüfen. Der Endpunkt generiert und speichert außerdem immer Antifälschungstoken für gerenderte Formulare, unabhängig davon, ob app.UseAntiforgery() Teil der Pipeline war.
Daher wurden bei einer Blazor SSR-App, die app.UseAntiforgery() nicht aufrief, ihre Formularübermittlungen vom Endpunkt weiterhin anhand von Antifälschungstoken validiert, und für ihre Formulare wurden weiterhin Token generiert.
Neues Verhalten
Ab ASP.NET Core 11 vertraut der Komponentenendpunkt Razor dem Antifälschungsurteil, das von vorgelagerter Middleware im IAntiforgeryValidationFeature der Anforderung gespeichert wurde. Bei einem Formular POST wird 400 Bad Request nur dann zurückgegeben, wenn das gespeicherte Ergebnis ungültig ist, und IAntiforgery wird nicht mehr aufgerufen, um die Anfrage selbst zu validieren. Der Endpunkt generiert Antiforgery-Token nur, wenn die tokenbasierte Antiforgery-Middleware für die Anforderung ausgeführt wurde; Wenn diese Middleware nicht vorhanden ist, überspringt der Endpunkt die Tokengenerierung.
Die Entscheidung kann von jeder der beiden Middleware-Komponenten erfasst werden:
- Die tokenbasierte Antifälschungs-Middleware, die
app.UseAntiforgery()hinzufügt. - Die automatische Cross-Origin-CSRF-Schutz-Middleware, die standardmäßig in mit
WebApplication.CreateBuildererstellte Apps eingefügt wird (neu in .NET 11).
Die Auswirkungen hängen von der Konfiguration der App ab:
- Apps, die anrufen
app.UseAntiforgery(), sind nicht betroffen. Anforderungen werden anhand von Antiforgery-Token überprüft, und Token werden für Formulare genau wie zuvor generiert. - Apps, die
app.UseAntiforgery()nicht aufrufen, sind jetzt durch die automatische CSRF-Schutz-Middleware geschützt statt durch die Tokenvalidierung im Endpunkt. Diese Apps geben keine Antiforgery-Token mehr für ihre Formulare aus.
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Das tokenbasierte Antiforgery-System und der neue originübergreifende CSRF-Schutz speichern nun ein einzelnes Validierungsergebnis im gemeinsamen IAntiforgeryValidationFeature-Element, das formverarbeitende Komponenten auslesen, um zu entscheiden, ob eine Anfrage abgelehnt werden soll. Dass der Razor Components-Endpunkt die Anforderung ein zweites Mal validierte, führte zu doppelter Arbeit und konnte ein Ergebnis erzeugen, das von dem der Middleware abwich. Das Generieren von Token, wenn keine Antifälschungs-Middleware vorhanden war, erzeugte Token, die von nichts validiert wurden.
Weitere Informationen finden Sie unter dotnet/aspnetcore#67082.
Empfohlene Maßnahme
Wenn Ihre Blazor SSR-App auf Fälschungsschutztoken basiert – z. B. zum Überprüfen von Formularübermittlungen oder zum Einfügen von Token in Formulare –, stellen Sie sicher, dass app.UseAntiforgery() aufgerufen wird:
var app = builder.Build();
app.UseAntiforgery();
Apps, die app.UseAntiforgery() direkt oder indirekt über AddRazorComponents aufrufen, erfordern keine Änderungen.
Wenn Sie app.UseAntiforgery() absichtlich entfernt haben und stattdessen den automatischen Cross-Origin-CSRF-Schutz verwenden möchten, sind keine Maßnahmen erforderlich. Beachten Sie, dass für Ihre Formulare keine Antiforgery-Token mehr generiert werden und dass Cross-Origin-Formularübermittlungen auf der Grundlage von Sec-Fetch-Site und Origin anstelle von Antiforgery-Token abgelehnt werden. Weitere Informationen finden Sie unter Verhindern von Cross-Site Request Forgery (XSRF/CSRF)-Angriffen in ASP.NET Core und Migrieren von ASP.NET Core in .NET 10 zu ASP.NET Core in .NET 11.
Betroffene APIs
Keiner. Es wurde keine öffentliche API-Oberfläche geändert. Die Änderung wirkt sich auf das Verhalten statischer Blazor serverseitiger Renderingendpunkte und des Antifälschungs-Zustandsanbieters aus, der Token generiert.