CA5368: Atur ViewStateUserKey Untuk Kelas yang Berasal dari Halaman
Properti | Nilai |
---|---|
ID Aturan | CA5368 |
Judul | Atur ViewStateUserKey Untuk Kelas yang Berasal dari Halaman |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Properti Page.ViewStateUserKey tidak ditetapkan dalam Page.OnInit atau Page_Init
metode .
Deskripsi aturan
Saat merancang Formulir Web ASP.NET, perhatikan serangan pemalsuan permintaan lintas situs (CSRF). Serangan CSRF dapat mengirim permintaan berbahaya dari pengguna yang diautentikasi ke Formulir Web ASP.NET Anda.
Salah satu cara melindungi dari serangan CSRF dalam Formulir Web ASP.NET adalah dengan mengatur halaman ViewStateUserKey ke string yang tidak dapat diprediksi dan unik untuk sesi. Untuk informasi selengkapnya, lihat Memanfaatkan Fitur Bawaan ASP.NET untuk Mematikan Serangan Web.
Cara memperbaiki pelanggaran
Atur ViewStateUserKey properti ke string yang tidak dapat diprediksi dan unik per sesi. Misalnya, jika Anda menggunakan status sesi ASP.NET, HttpSessionState.SessionID akan berfungsi.
Kapan harus menekan peringatan
Aman untuk menyembunyikan peringatan dari aturan ini jika:
- Halaman Formulir Web ASP.NET tidak melakukan operasi sensitif.
- Serangan pemalsuan permintaan lintas situs dimitigasi dengan cara yang tidak dideteksi oleh aturan ini. Misalnya, jika halaman mewarisi dari halaman master yang berisi pertahanan CSRF.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
Pelanggaran
using System;
using System.Web.UI;
class ExampleClass : Page
{
protected override void OnInit (EventArgs e)
{
}
}
Solusi
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;
}
}