CA3147: ValidateAntiForgeryToken ile fiil işleyicilerini işaretleme

Özellik Değer
Kural Kimliği CA3147
Başlık ValidateAntiForgeryToken ile fiil işleyicilerini işaretleme
Kategori Güvenlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

ASP.NET MVC denetleyicisi eylem yöntemi ValidateAntiForgeryTokenAttribute veya HttpGetAttribute veya AcceptVerbsAttribute gibi HTTP fiilini belirten bir öznitelikle işaretlenmez.

Kural açıklaması

ASP.NET MVC denetleyicisi tasarlarken siteler arası istek sahteciliği saldırılarına dikkat edin. Siteler arası istek sahteciliği saldırısı, kimliği doğrulanmış bir kullanıcıdan ASP.NET MVC denetleyicinize kötü amaçlı istekler gönderebilir. Daha fazla bilgi için bkz . ASP.NET MVC ve web sayfalarında XSRF/CSRF önleme.

Bu kural, MVC denetleyicisi eylem yöntemlerini ASP.NET denetler:

İhlalleri düzeltme

  • HTTP GET isteklerini işleyen ve zararlı olabilecek yan etkileri olmayan ASP.NET MVC denetleyicisi eylemleri için yöntemine bir HttpGetAttribute ekleyin.

    HTTP GET isteklerini işleyen ve hassas verileri değiştirme gibi zararlı olabilecek yan etkileri olan bir ASP.NET MVC denetleyicisi eyleminiz varsa, uygulamanız siteler arası istek sahteciliği saldırılarına karşı savunmasızdır. Yalnızca HTTP POST, PUT veya DELETE isteklerinin hassas işlemler gerçekleştirmesi için uygulamanızı yeniden tasarlamanız gerekir.

  • HTTP POST, PUT veya DELETE isteklerini işleyen ASP.NET MVC denetleyicisi eylemleri için ValidateAntiForgeryTokenAttribute ve izin verilen HTTP fiillerini (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute veya HttpDeleteAttribute) belirten öznitelikler ekleyin. Ayrıca, MVC görünümünüzden veya Razor web sayfanızdan HtmlHelper.AntiForgeryToken() yöntemini çağırmanız gerekir. Örnek için bkz . Düzenleme yöntemlerini ve düzenleme görünümünü inceleme.

Uyarıların ne zaman bastırılması gerekiyor?

Aşağıdakiler durumunda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:

  • ASP.NET MVC denetleyicisi eyleminin zararlı yan etkileri yoktur.
  • Uygulama, kötü amaçlı yazılımdan koruma belirtecini farklı bir şekilde doğrular.

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 CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

ValidateAntiForgeryToken öznitelik örneği

Ihlal:

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

Çözüm:

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

HttpGet özniteliği örneği

Ihlal:

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

Çözüm:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        [HttpGet]
        public ActionResult Help(int topicId)
        {
            return null;
        }
    }
}