CA5368: Sayfadan türetilen sınıflar için ViewStateUserKey değerini ayarlayın

Özellik Değer
Kural Kimliği CA5368
Başlık Sayfadan Türetilmiş Sınıflar için ViewStateUserKey Ayarla
Kategori Güvenlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

Page.ViewStateUserKey özelliği veya yönteminde Page.OnInitPage_Init atanmadı.

Kural açıklaması

ASP.NET Web Formu tasarlarken siteler arası istek sahteciliği (CSRF) saldırılarına dikkat edin. CSRF saldırısı, kimliği doğrulanmış bir kullanıcıdan ASP.NET Web Formunuza kötü amaçlı istekler gönderebilir.

ASP.NET Web Formu'nda CSRF saldırılarına karşı korumanın bir yolu, sayfayı ViewStateUserKey öngörülemeyen ve bir oturum için benzersiz bir dizeye ayarlamaktır. Daha fazla bilgi için bkz . Web Saldırılarını Önlemeye yönelik ASP.NET Yerleşik Özelliklerden Yararlanma.

İhlalleri düzeltme

ViewStateUserKey özelliğini oturum başına tahmin edilemeyen ve benzersiz bir dizeye ayarlayın. Örneğin, oturum durumunu HttpSessionState.SessionID ASP.NET kullanırsanız çalışır.

Uyarıların ne zaman bastırılması gerekiyor?

Aşağıdakiler durumunda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:

  • ASP.NET Web Formu sayfası hassas işlemler gerçekleştirmez.
  • Siteler arası istek sahteciliği saldırıları, bu kuralın algılamadığı bir şekilde azaltılır. Örneğin, sayfa CSRF savunmaları içeren bir ana sayfadan devralıyorsa.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Sahte kod örnekleri

Ihlal

using System;
using System.Web.UI;

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

Çözüm

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;
    }
}