CA3147: Tandai pengendali fungsi dengan ValidateAntiForgeryToken

Properti Nilai
ID Aturan CA3147
Judul Tandai penangan permintaan HTTP dengan ValidateAntiForgeryToken
Kategori Keamanan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

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 metode tindakan pengontrol MVC ASP.NET dapat:

Cara memperbaiki pelanggaran

  • Untuk tindakan pengontrol MVC di ASP.NET yang menangani permintaan HTTP GET dan tidak memiliki potensi efek samping yang 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;
        }
    }
}