ASP.NET Core CSRF Token Expired Hatası ve Çözümü

Bu blog yazısında, ASP.NET Core'da karşılaşılan "CSRF Token Expired" hatasının nedenleri ve nasıl çözüleceği anlatılmaktadır. Çözüm adımları, CSRF koruması, form yapılandırmaları ve token sürelerinin nasıl ayarlanacağı üzerine detaylı bilgiler sunulmaktad

BFS

Giriş: CSRF Token Hatası Nedir ve Neden Oluşur?



Bir gün ASP.NET Core projenizde bir hata ile karşılaştınız. Kullanıcı formunu göndermeye çalışırken, "CSRF Token Expired" hatasıyla karşılaştınız. Hemen kafanızda bir sürü soru işareti beliriyor, değil mi? “Bu token nedir, neden süresi dolmuş?” diye düşünüyorsunuz. Endişelenmeyin, yalnız değilsiniz. Bu yazıda, bu hatayı çözmenize yardımcı olacak adım adım bir rehber hazırladım.

CSRF (Cross-Site Request Forgery), web uygulamalarını hedef alan bir saldırı türüdür. Bu saldırının amacı, kullanıcının izni olmadan zararlı isteklerin gönderilmesidir. ASP.NET Core, bu tür saldırılara karşı korunmak için Token kullanır. Ancak, bazen bu token süresi dolduğunda "CSRF Token Expired" hatası alabilirsiniz.

CSRF Token Expired Hatasının Sebepleri



CSRF token’ları, her bir istek için benzersiz ve geçici bir anahtar görevi görür. Süresi dolan token’lar genellikle aşağıdaki nedenlerden ötürü oluşur:

1. Uzun Süreli Oturumlar: Kullanıcı çok uzun süre işlem yapmadığında, oturumun süresi dolar ve token geçersiz hale gelir.
2. Tarayıcı Çerezleri: Tarayıcıda çerezler silindiğinde veya çerezler tarayıcı tarafından engellendiğinde token kaybolur.
3. Yanlış Konfigürasyonlar: CSRF token’larının doğru şekilde yapılandırılmamış olması da bu hatayı tetikleyebilir.

Adım Adım Çözüm Yöntemleri



1. CSRF Token’ın Doğru Yapılandırıldığından Emin Olun

İlk olarak, CSRF korumasının doğru bir şekilde yapılandırıldığından emin olmanız gerekiyor. ASP.NET Core’da CSRF korumasını etkinleştirmek için `services.AddAntiforgery()` kullanılır.

Aşağıdaki gibi `Startup.cs` dosyanızda bu konfigürasyonu doğru şekilde yaptığınızdan emin olun:


public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddAntiforgery(options => 
    {
        options.HeaderName = "X-XSRF-TOKEN"; // CSRF token başlık adı
    });
}


2. Formlarda CSRF Token'ını Dahil Edin

Formlarınızı gönderdiğinizde, CSRF token’ının doğru şekilde formun içine eklendiğinden emin olmalısınız. Bu token, her POST isteğiyle birlikte gönderilmelidir. Aşağıdaki gibi `@Html.AntiForgeryToken()` kullanarak formunuza token ekleyebilirsiniz:


@Html.AntiForgeryToken()


Bu, her form gönderisi ile birlikte token’ın doğruluğunu kontrol etmenizi sağlar.

3. Token Süresi Ayarlarını Yapılandırın

Eğer kullanıcılarınızın uzun süre işlem yapmasını istiyorsanız, token sürelerini uzatmayı düşünebilirsiniz. Bu, token’ın süresinin dolmasını engelleyebilir. Token süresi, aşağıdaki gibi `options` parametreleriyle ayarlanabilir:


public void ConfigureServices(IServiceCollection services)
{
    services.AddAntiforgery(options => 
    {
        options.Lifetime = TimeSpan.FromMinutes(60); // Token’ın geçerlilik süresi
    });
}


Böylece, token’larınız belirlediğiniz süre kadar geçerli olacak.

4. Tarayıcı Çerezlerini Kontrol Edin

Bazı durumlarda, tarayıcı çerezleri token’ların doğru şekilde iletilmemesine neden olabilir. Eğer token çerezlerle gönderiliyorsa, çerezlerin doğru şekilde ayarlandığından emin olun. Çerezler, `SameSite` özelliği ile birlikte gönderilmelidir. Bu özellik, token’ların yalnızca doğru kaynağa (aynı siteye) gönderilmesini sağlar.


services.Configure(options =>
{
    options.MinimumSameSitePolicy = SameSiteMode.Strict;
});


5. CSRF Token’ın Kontrolünü Yapın

Son olarak, token’ın doğru bir şekilde doğrulandığını kontrol edin. ASP.NET Core’da, `[ValidateAntiForgeryToken]` özniteliği ile form gönderilerini doğrulayabilirsiniz. Bu, CSRF token’ının doğru olup olmadığını kontrol eder.


[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult SubmitForm(MyModel model)
{
    // Form işleme kodlarınız
    return View();
}


Bu, token’ın süresinin dolup dolmadığını kontrol etmek için temel bir adımdır.

Sonuç



“CSRF Token Expired” hatası, genellikle güvenlik nedeniyle karşınıza çıkan bir engel gibi görünse de, doğru yapılandırma ile kolayca çözebilirsiniz. Token’larınızın geçerlilik süresini uzatarak, formlarınıza token ekleyerek ve doğru konfigürasyonu yaparak bu sorunu ortadan kaldırabilirsiniz.

Umarım bu rehber, karşılaştığınız hatayı çözmenize yardımcı olmuştur. Unutmayın, CSRF token’ları güvenliğinizi artırmak için kritik öneme sahiptir. Onlara dikkat ederek uygulamanızı güvenli tutabilirsiniz.

İlgili Yazılar

Benzer konularda diğer yazılarımız

ASP.NET Core ile Mobil Uygulama Geliştirme: Cross-Platform Web ve Mobil Uygulama Birleştirme

Günümüzde mobil uygulamalar hayatımızın ayrılmaz bir parçası haline geldi. Akıllı telefonlarımızda geçirdiğimiz zamanın büyük bir kısmını mobil uygulamalar sayesinde geçiriyoruz. Peki, bir mobil uygulama geliştirirken karşılaştığımız zorlukları nasıl...

VPN Kullanırken Güvenlik Hatalarından Kaçınmak: En Yaygın Yapılan 7 Hata ve Çözümleri

**İnternette güvenli gezintiyi sağlamak, modern dünyada her geçen gün daha önemli hale geliyor. Hangi cihazı kullanırsanız kullanın, dijital güvenliğinizi korumak, çoğu zaman zor bir görev gibi görünebilir. Ancak **VPN** (Virtual Private Network - Sanal...

ASP.NET Core 500 Internal Server Error: Sebepleri ve Çözümleri

Bir web geliştiricisi olarak, karşılaştığınız en zorlayıcı hatalardan biri şüphesiz "500 Internal Server Error"dır. Bu hata, web uygulamanızda her şeyin yolunda gittiğini düşündüğünüz bir anda karşınıza çıkabilir ve tüm projeyi durdurabilir. Ancak merak...