CA5391: Fälschungssicherheitstoken in ASP.NET Core MVC-Controllern verwenden.
Eigenschaft | Wert |
---|---|
Regel-ID | CA5391 |
Titel | Fälschungssicherheitstoken in ASP.NET Core MVC-Controllern verwenden. |
Kategorie | Security |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Aktionen, die zum Ändern von Vorgängen führen, haben kein Antifälschungstokenattribut. Oder Verwenden eines globalen Antifälschungstokenfilters, ohne erwartete Antifälschungstokenfunktionen aufzurufen.
Regelbeschreibung
Das Verarbeiten einer POST
-, PUT
-, PATCH
- oder DELETE
-Anforderung, ohne ein Antifälschungstoken zu validieren, kann für websiteübergreifende Anforderungsfälschungsangriffe anfällig machen. Mit einem websiteübergreifenden Anforderungsfälschungsangriff können böswillige Anforderungen von einem authentifizierten Benutzer an Ihren ASP.NET Core MVC-Controller gesendet werden.
Behandeln von Verstößen
- Markieren Sie die ändernde Aktion mit einem gültigen Antifälschungstokenattribut:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Attribut mit einem Namen wie
%Validate%Anti_orgery%Attribute
.
- Fügen Sie dem globalen Filter das gültige Antifälschungstokenattribut mit Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add hinzu.
- Fügen Sie eine beliebige benutzerdefinierte oder von MVC bereitgestellte Antifälschungsfilterklasse hinzu, die
Validate
für jede Klasse aufruft, die die Microsoft.AspNetCore.Antiforgery.IAntiforgery-Schnittstelle implementiert.
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, diese Regel zu unterdrücken, wenn andere Lösungen als Antifälschungstokenattribute verwendet werden, um CSRF-Sicherheitsrisiken zu entschärfen. Weitere Informationen finden Sie unter Prevent Cross-Site Request Forgery (XSRF/CSRF) Attacks in ASP.NET Core (Verhindern von websiteübergreifenden Anforderungsfälschungen (XSRF/CSRF) in ASP.NET Core).
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Sie können konfigurieren, ob die Regel nur für abgeleitete Klassen von Microsoft.AspNetCore.Mvc.Controller in Ihrer Codebasis gilt. Um z. B. festzulegen, dass die Regel nicht für Code innerhalb abgeleiteter Typen von ControllerBase ausgeführt werden soll, fügen Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzu:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Pseudocodebeispiele
Ohne Verletzung des Antifälschungstokenattributs
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
}
Ohne gültigen globalen Antifälschungsfilter
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
public Task OnAuthorizationAsync (AuthorizationFilterContext context)
{
return null;
}
}
class BlahClass
{
public static void BlahMethod ()
{
FilterCollection filterCollection = new FilterCollection ();
filterCollection.Add(typeof(FilterClass));
}
}
Markiert mit einer Antifälschungstokenattribut-Lösung
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction ()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction ()
{
return null;
}
}
Verwenden eines gültigen globalen Antifälschungsfilters
using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
private readonly IAntiforgery antiforgery;
public FilterClass(IAntiforgery antiforgery)
{
this.antiforgery = antiforgery;
}
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return antiforgery.ValidateRequestAsync(context.HttpContext);
}
}
class BlahClass
{
public static void BlahMethod()
{
FilterCollection filterCollection = new FilterCollection();
filterCollection.Add(typeof(FilterClass));
}
}