AntiForgeryToken ve MVC

Merhaba Arkadaşlar,

Bugün sizlere antiforgerytoken ile sitelere yapılan atakların bir kısmını çözümlemekten bahsetmek istiyorum. Aslında çoğumuzca aşina olunan bir konu. Zira .net bu konuda antiforgerytoken implamantasyonunu yapar iken oldukça basit kullanımı olacak şekilde sunmaya özen göstermiş durumda. Sadece bir attribute ekleyerek bu özelliği ilgili metodumuzda aktif edebiliyoruz.

Peki Nedir bu antiforgerytoken?

Özellikle MVC’den önceki teknolojilerin herhangi biri ile yazılım geliştirmiş iseniz bu konuyu daha net kavrayabilirsiniz. Diyelim ki bir formunuz var. (Üyelik, Giriş, Bilgi, İletişim, vb…) Ve bu formda haliyle inputlar vasıtası ile bir takım bilgiler talep ediyorsunuz. (Kullanıcı adı, şifre, vb…) İşte burada eğer unique olan bir kimliğe sahip değil iseniz dışarıdan ilgili URL’e gelecek ve ilgili inputları içeren tüm isteklere maruz kalırsınız.

Yani diyelim ki “http://siteadresiniz.com/login” gibi bir URL’iniz olsun ve bu sayfada kullanıcıdan “Username, Password” isimli iki input’u doldurmasını ve yine “http://siteadresiniz.com/login” adresine post etmesini istiyor olun. İşte tam da burada bir hata yapıyor ve anonim ataklara karşı açık hale geliyorsunuz.

Kötü niyetli kişinin bir bot yazarak veya basit bir JS ile bile bu sayfaya farklı denemeler yaparak login olmasını denemesini sağlayabiliyorsunuz.

Kişi; Username ve Password adında iki alanı sanki input imiş gibi sizin ilgili adresinize durmadan dışarıdan post edip giriş yapmayı deneyebiliyor.

Burada denemelerin sonrasında alabileceğiniz bir sürü engel var elbette. Ama işte antiforgerytoken tam da bu gibi bir konunun hiç yaşanmaması adına devreye giriyor.

Peki AntiForgeryToken Nasıl Çalışıyor?

Sunucu (server) tarafında yalnızca o istek için oluşturulan bir uniqe (tekil/benzersiz) anahtar yer alıyor ve bu anahtarı sayfanıza çağırıyorsunuz;

@Html.AntiForgeryToken()

İşte bu noktada ilgili inputlar post edilir iken metodunuza aşağıdaki attribute’ü eklemiş olmanız gerekiyor.

[ValidateHttpAntiForgeryToken]

İşlem bu sıra ile yapılmış ise o zaman süreç şöyle işleyecektir.

 

  1. Sayfanız ilk yüklenme esnasında sunucudan bir uniqe (benzersiz) anahtar talep ediyor ve alıyor.
    (Örnek: cbUXFsuIuTkcOOFDR-LGvdO7S3ElbL_u7h371HHD0pCcfFeSccOn5akIZttHtzBqsu4Th49VvD0Vn0CjMQoGgbcGZ1378UsA154AeY9oZ7k1)
  2. Bu bilgi <form> tag’inin içerisinde olduğu için otomatik olarak __RequestVerificationToken adında bir hidden nesnesinde tutuluyor.
  3. Daha sonra kullanıcı formu oldurup butona tıkladığında post işleminde bu değer de sunucu tarafında post ediliyor.
  4. Sunucu, bu değerin kendisinin ürettiği bir anahtar olup olmadığını anladığı ve izin verdiği taktirde method kullanılabilir oluyor ve kodlarını çalışmaya başlıyor.

Aksi taktirde, yani bu değer sunucu tarafından üretilmemiş ise o zaman kullanıcı hata sayfasıyla karşılaşıyor ve haliyle siz ne kadar kod yazarsanız yazın, hiç biri çalışmaya başlamıyor. Haliyle sunucunuz yorulmuyor ve boşu boşuna işlem yapmak zorunda kalmıyorsunuz.

 

Kıssadan hisse; İstemciden (ön yüzden) gelecek olan talebin, gerçekten sitenin ön yüzünden geldiğini anlamak için MVC’nin bize sunmuş olduğu oldukça güzel bir özelliktir AntiForgeryToken.

 

Sorularınız olur ise aşağıdaki YORUM kısmına yazmayı lütfen ihmal etmeyin.

 

İyi çalışmalar… 🙂

Share this Story

Related Posts

Kimler Neler Demiş?

avatar
  Subscribe  
Bildir

Search