Bagikan melalui


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:

Cara memperbaiki pelanggaran

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