CA5391: ASP.NET Core MVC denetleyicilerinde antiforgery belirteçleri kullanma
Özellik | Değer |
---|---|
Kural Kimliği | CA5391 |
Başlık | ASP.NET Core MVC denetleyicilerinde sahtecilik önleme belirteçleri kullanın |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
İşlemlerin değiştirilmesine neden olan eylemlerin bir sahte belirteç özniteliği yoktur. Alternatif olarak, beklenen sahteciliğe karşı belirteç işlevlerini çağırmadan genel bir sahteciliğe karşı koruma belirteci filtresi de kullanabilirsiniz.
Kural açıklaması
POST
Bir , PUT
, veya PATCH
DELETE
isteğinin, bir sahteciliğe karşı koruma belirtecini doğrulamadan işlenmesi siteler arası istek sahteciliği saldırılarına karşı savunmasız olabilir. Siteler arası istek sahteciliği saldırısı, kimliği doğrulanmış bir kullanıcıdan ASP.NET Core MVC denetleyicinize kötü amaçlı istekler gönderebilir.
İhlalleri düzeltme
- Değiştirme eylemini geçerli bir kötü amaçlı yazılımdan koruma belirteci özniteliğiyle işaretleyin:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Adı gibi
%Validate%Anti_orgery%Attribute
olan öznitelik.
- ile Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Addgenel filtreye geçerli sahte belirteç özniteliğini ekleyin.
- Arabirimini uygulayan
Validate
herhangi bir sınıfı çağıran Microsoft.AspNetCore.Antiforgery.IAntiforgery özel veya Mvc tarafından sağlanan herhangi bir kötü amaçlı yazılımdan koruma filtresi sınıfı ekleyin.
Uyarıların ne zaman bastırılması gerekiyor?
CSRF güvenlik açıklarını azaltmak için sahte belirteç özniteliklerini kullanma dışındaki çözümler benimsenirse bu kuralın gizlenmek güvenlidir. Daha fazla bilgi için, bkz. ASP.NET Core'da Siteler Arası İstek Sahteciliği (XSRF/CSRF) saldırılarını önleme.
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 CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
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.CA5391.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
Kuralın yalnızca kod tabanınızdaki türetilmiş sınıfları Microsoft.AspNetCore.Mvc.Controller için geçerli olup olmadığını yapılandırabilirsiniz. Örneğin, kuralın türetilmiş türleri ControllerBaseiçindeki herhangi bir kodda çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Sahte kod örnekleri
Sahte belirteç özniteliği ihlali olmadan
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
}
Geçerli genel sahteciliğe karşı koruma filtresi olmadan
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
public Task OnAuthorizationAsync (AuthorizationFilterContext context)
{
return null;
}
}
class BlahClass
{
public static void BlahMethod ()
{
FilterCollection filterCollection = new FilterCollection ();
filterCollection.Add(typeof(FilterClass));
}
}
Sahteciliğe karşı koruma belirteci öznitelik çözümüyle işaretlendi
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction ()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction ()
{
return null;
}
}
Geçerli bir genel sahteciliğe karşı koruma filtresi kullanma
using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
private readonly IAntiforgery antiforgery;
public FilterClass(IAntiforgery antiforgery)
{
this.antiforgery = antiforgery;
}
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return antiforgery.ValidateRequestAsync(context.HttpContext);
}
}
class BlahClass
{
public static void BlahMethod()
{
FilterCollection filterCollection = new FilterCollection();
filterCollection.Add(typeof(FilterClass));
}
}