Share via


CA5368: Ange ViewStateUserKey för klasser som härleds från sidan

Property Värde
Regel-ID CA5368
Rubrik Ange ViewStateUserKey för klasser som härleds från sidan
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

Egenskapen Page.ViewStateUserKey har inte tilldelats i Page.OnInit eller metoden Page_Init .

Regelbeskrivning

När du utformar ett ASP.NET webbformulär bör du tänka på csrf-attacker (cross-site request forgery). En CSRF-attack kan skicka skadliga begäranden från en autentiserad användare till ditt ASP.NET webbformulär.

Ett sätt att skydda mot CSRF-attacker i ASP.NET webbformulär är genom att ange en sidas ViewStateUserKey till en sträng som är oförutsägbar och unik för en session. Mer information finns i Dra nytta av ASP.NET inbyggda funktioner för att avvärja webbattacker.

Så här åtgärdar du överträdelser

Ange egenskapen ViewStateUserKey till en oförutsägbar och unik sträng per session. Om du till exempel använder ASP.NET sessionstillstånd HttpSessionState.SessionID fungerar det.

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om:

  • Sidan ASP.NET webbformulär utför inte känsliga åtgärder.
  • Förfalskningsattacker mellan webbplatser minimeras på ett sätt som den här regeln inte identifierar. Om sidan till exempel ärver från en huvudsida som innehåller CSRF-skydd.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
    }
}

Lösning

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
        // Assuming that your page makes use of ASP.NET session state and the SessionID is stable.
        ViewStateUserKey = Session.SessionID;
    }
}