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:
ValidateAntiforgeryTokenAttribute'a sahip olun ve HTTP GET dahil değil, izin verilen HTTP fiillerini belirtin.
http GET'i izin verilen fiil olarak belirtin.
İ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 none
olarak 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;
}
}
}