Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA5391 |
| Başlık | ASP.NET Core MVC denetleyicilerinde sahtecilik önleme belirteçleri kullanın |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
İşlemlerin değiştirilmesine neden olan eylemlerin bir sahtecilik önleme belirteci özniteliği yoktur. Ya da beklenen sahteciliği önleme belirteci işlevlerini çağırmadan genel bir sahteciliği önleme belirteci filtresi kullanabilirsiniz.
Kural açıklaması
POST, PUT, PATCH, veya DELETE isteğinin bir sahteciliğe karşı koruma tokeni doğrulamadan işlenmesi, çapraz site 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%Attributeolan öznitelik.
- ile Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Addgenel filtreye geçerli sahte belirteç özniteliğini ekleyin.
arayüzünü uygulayan herhangi bir sınıfta 'ı çağıran özel veya Mvc tarafından sağlanan herhangi bir sahtecilik karşıtı filtre sınıfı ekleyin.
Uyarıların ne zaman bastırılması gerekiyor?
CSRF güvenlik açıklarını azaltmak için antiforgery token özniteliklerini kullanma dışındaki çözümler kullanılırsa bu kuralı bastırmak 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 noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
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
Sahtecilik önleme belirteci öznitelik 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));
}
}