ASP.Net Core Projelerinde Güvenlik- Cross-Site Request Forgery(CRSF) Uygulama

Önceki yazımda ASP.Net Core projelerinde Cross-Site Request Forgery(CRSF) konusu ile ilgili bilgi vermiştim. Bu yazımda ise Cross-Site Request Forgery(CRSF) konusunla ilgili uygulamalar gerçekleştireceğiz. Faydalı olması dileğiyle . :)

ASP .NET Core siteler arası bilgi hırsızlığına karşı bazı önlemler almaktadır.

Haydi Bu önlemlerden bahsedelim!

  • Form alanını olduğu her alanda bildiğiniz üzere Cross-Site Request Forgery, yani siteler arası istek hırsızlığı gerçekleşebilir.
  • ASP.NET Core yapısı bu alanda Form Tag’ının içerisindeki input taginde RequestVericationToken adında bir token kullanmıştır. Form Tag’ı browserda oluşurken bu Form Tag’ı içerisindeki input alanı hidden olarak oluşuyor.
  • Bu Token’ın aynısından Application kısmında da oluşturulmaktadır.
  • Application içerisinden gelen token yani cookie değeri ile formdan gelen token ASP.Net Core tarafından karşılaştırılır.
  • Eğer bu iki alan aynı ise bu isteğe olumlu karşılık verilir aksi takdirde reddedilir.
  • Bunun sayesinde siteler arası hırsızlığın önüne geçilmiş olur.
  • ASP .NET Core ile geliştirme yapıyorsanız ek bir önlem almanıza gerek yok, siteler arası hırsızlığı önleyebilmek için sadece attribute eklemeniz yeterli olacaktır.
  • Tek yapılması gereken, hangi metotta siteler arası istek hırsızlığı engellenmek istiyorsa “ValidateAntiForgeryToken” attributesini kullanmaktır.
  • Form tarafında kayıt işlemi gerçekleşip, request düştüğü zaman Application’daki Cookie bilgisi ile ile inputtaki token bilgisi karşılaştırılacak. İkisi farklı ise ve onay alınmıyorsa o zaman yönlendirme yapılmayacaktır.

Peki ValidateAntiForgeryToken attribute’sini her post işleminde eklemek yerine tüm metotlarda olmasını istersem ne yapmam gerekir ?

  • Startup.cs içerisinde ConfigureServices metodu içerisine gelinir. Aşağıdaki gibi bir kod parçası eklenir. Bu alan eklendiğinde artık siteler arası hırsızlığa karşı , metot bazında değil uygulama bazında bir koruma sağlanır.
  • Uygulama bazında Startup.cs’de bu alanı eklediniz. Ancak bir metotta siteler arası hırsızlığa karşı önlem aldığınız bu metodun çalışmasını istemiyorsunuz. O zaman da IgnoreAntiforgeryToken Attribute’sini eklemeniz kafi olacaktır.

https://github.com/KardelRuveyda/ASPNetSecurity kodları Github ‘da oluşturduğum Repository’den inceleyebilisiniz.

Kaynakça

Software Specialist— @DogusTechnology

Software Specialist— @DogusTechnology