ASP.NET Core — (XSRF/CSRF) Siteler Arası İstek Sahteciliği Saldırılarını Önle

CSRF (Siteler Arası İstek Sahteciliği) jetonu, CSRF saldırılarını önlemede harika bir mekanizmadır. CSRF saldırılarına karşı nasıl korunurlar? Nasıl üretilmelidirler?
CSRF Token (jeton) nedir?
Bir CSRF jetonu, bir sunucu uygulamasının CSRF zafiyetine karşı savunmasız kaynakları korumak için oluşturduğu gizli, benzersiz ve öngörülemeyen bir değerdir.
Bu jetonlar, istemci tarafından yapılan sonraki bir HTTP isteğinde sunucudaki uygulama tarafından oluşturulur ve gönderilir.
İstek yapıldıktan sonra uygulama, kullanıcı oturumunda ve istekte bulunan iki jetonları karşılaştırır. Jeton eksikse veya kullanıcı oturumu içindeki değerle eşleşmiyorsa istek reddedilir, kullanıcı oturumu sonlandırılır ve olay olası bir CSRF saldırısı olarak günlüğe kaydedilir.
.Net Core’ da CSRF Token (jeton) Nasıl Üretilir?
Bu makaleyi yazma amacım bilinenin dışına çıkarak sizlere daha basit bir yol göstermektir.
Normalde bilinen kod örnekleri genellikle şu şekildedir:
Basit bir form hazırlayalım.
<form action="/" method="post">
@Html.AntiForgeryToken()
</form>
Bu formu post ettiğinizde göndereceğiniz methodunuzda [ValidateAntiForgeryToken] attribute (bağlacı) yoksa uygulama sizi dışarıdan saldırı yapıyor muamelisi yapar ve isteğinizi reddeder.
Bu örneğin sağlıklı bir şekilde çalışabilmesi için methodunuzu genellikle aşağıdaki şekilde hazırlarsınız ve uygulama isteklerinizi doğrulamış olur.
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult MethodAdi([FromForm] FormModel value)
{
// kod bloğu
JsonResult(true&false);
}
Fakat… Bu yöntem ile uygulamanızda ne kadar form ve method varsa aynı prosedürleri uygulamanız gerekmektedir.
Şimdi gelelim fasulyenin faydalarına, umarım faydalı olur.
Yukarıdaki form ve method örneğini unutun gitsin.
.Net Core ile o kadar çok büyük nimetler geldiki anlatmakla bitmez heralde.
Dedik ki yukarıdaki yöntem ile yani google araştırmalarınızda genellikle karşınıza çıkan örneklerdeki prosedürde her formunuza ve methodlarınıza ayrı ayrı işlem yapmanız gerekiyor.
Aşağıda vereceğim yöntem uygulamanızda bulunan bütün POST işlemlerini tetikleyen formlarınız için otomatik olarak CSRF jeton üretecek ve arka tarafta doğrulamasını yapacak.
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
Bu Mvc filtresini Startup.cs dosyanızdaki ConfigureServices methodu altına eklemeniz yeterlidir. İşte hepsi bu kadar..
Esenlikle kalın.
Burak YAVUZER