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 9'da varsayılan olarak etkin | Hayır |
Neden
Page.ViewStateUserKey özelliği veya yönteminde Page.OnInit Page_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 none
olarak 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;
}
}