CA3147: Tandai penangan kata kerja dengan ValidateAntiForgeryToken
Properti | Nilai |
---|---|
ID Aturan | CA3147 |
Judul | Menandai handler kata kerja dengan ValidateAntiForgeryToken |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Metode tindakan pengontrol MVC ASP.NET tidak ditandai dengan ValidateAntiForgeryTokenAttribute, atau atribut yang menentukan kata kerja HTTP, seperti HttpGetAttribute atau AcceptVerbsAttribute.
Deskripsi aturan
Saat merancang pengontrol ASP.NET MVC, perhatikan serangan pemalsuan permintaan antar situs. Serangan pemalsuan permintaan antar situs dapat mengirim permintaan berbahaya dari pengguna yang diautentikasi ke pengontrol ASP.NET MVC Anda. Untuk informasi selengkapnya, lihat Pencegahan XSRF/CSRF di ASP.NET MVC dan halaman web.
Aturan ini memeriksa apakah ASP.NET metode tindakan pengontrol MVC:
Memiliki ValidateAntiforgeryTokenAttribute dan tentukan kata kerja HTTP yang diizinkan, tidak termasuk HTTP GET.
Tentukan HTTP GET sebagai kata kerja yang diizinkan.
Cara memperbaiki pelanggaran
Untuk ASP.NET tindakan pengontrol MVC yang menangani permintaan HTTP GET dan tidak memiliki efek samping yang berpotensi berbahaya, tambahkan HttpGetAttribute ke metode .
Jika Anda memiliki tindakan pengontrol MVC ASP.NET yang menangani permintaan HTTP GET dan memiliki efek samping yang berpotensi berbahaya seperti memodifikasi data sensitif, maka aplikasi Anda rentan terhadap serangan pemalsuan permintaan lintas situs. Anda harus mendesain ulang aplikasi Anda sehingga hanya permintaan HTTP POST, PUT, atau DELETE yang melakukan operasi sensitif.
Untuk ASP.NET tindakan pengontrol MVC yang menangani permintaan HTTP POST, PUT, atau DELETE, tambahkan ValidateAntiForgeryTokenAttribute dan atribut yang menentukan kata kerja HTTP yang diizinkan (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute, atau HttpDeleteAttribute). Selain itu, Anda perlu memanggil metode HtmlHelper.AntiForgeryToken() dari tampilan MVC atau halaman web Razor Anda. Misalnya, lihat Memeriksa metode edit dan mengedit tampilan.
Kapan harus menekan peringatan
Aman untuk menyembunyikan peringatan dari aturan ini jika:
- Tindakan pengontrol MVC ASP.NET tidak memiliki efek samping yang berbahaya.
- Aplikasi memvalidasi token antiforgery dengan cara yang berbeda.
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 CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh atribut ValidateAntiForgeryToken
Pelanggaran:
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
public ActionResult TransferMoney(string toAccount, string amount)
{
// You don't want an attacker to specify to who and how much money to transfer.
return null;
}
}
}
Solusi:
using System;
using System.Xml;
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult TransferMoney(string toAccount, string amount)
{
return null;
}
}
}
Contoh atribut HttpGet
Pelanggaran:
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
public ActionResult Help(int topicId)
{
// This Help method is an example of a read-only operation with no harmful side effects.
return null;
}
}
}
Solusi:
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
[HttpGet]
public ActionResult Help(int topicId)
{
return null;
}
}
}