ASP.NET Core ‘CSRF Token Expired’ Hatası Nasıl Çözülür?

Bu blog yazısında, ASP.NET Core uygulamanızda karşılaşılan ‘CSRF Token Expired’ hatasının nedenleri ve çözüm yolları detaylı bir şekilde ele alınmıştır.

BFS

Bir gün projenizde bir şeylerin ters gittiğini fark ettiniz. Kullanıcılarınız, formu göndermeye çalışırken “CSRF Token Expired” hatasıyla karşılaşıyorlar. Ne olduğunu anlamadınız, ama bu hata, güvenlik konusunda dikkat edilmesi gereken önemli bir nokta. Endişelenmeyin, çünkü bu yazı ile bu hatanın ne olduğunu ve nasıl çözüleceğini adım adım öğreneceksiniz.

CSRF Token Hatası Nedir?



İlk önce, bu hatanın ardındaki sorunu anlamamız gerekiyor. CSRF (Cross-Site Request Forgery), kötü niyetli bir kullanıcının başka bir kullanıcının oturumunu kullanarak zararlı istekler göndermesine neden olan bir güvenlik açığıdır. ASP.NET Core, CSRF saldırılarına karşı koruma sağlamak için her isteğe bir token ekler. Bu token, gelen isteklerin güvenli olup olmadığını kontrol etmek için kullanılır. Eğer token geçersiz veya süresi dolmuşsa, CSRF Token Expired hatasını alırsınız.

CSRF Token Expired Hatası Çözümü



CSRF token'ın geçerli olmaması genellikle birkaç sebepten kaynaklanabilir:

1. Token'ın Süresi Dolmuş Olabilir: Token’lar genellikle bir süre geçerlidir. Eğer bir kullanıcı sayfayı uzun süre beklerse, token’ın süresi dolabilir.
2. Tarayıcı Önbelleklemesi: Tarayıcılar, bazen eski CSRF token’larını kullanmaya devam edebilir. Bu da hataya yol açabilir.
3. Sunucu veya Yapılandırma Sorunları: Sunucu tarafındaki yapılandırma hataları da token'ın doğruluğunu engelleyebilir.

Peki, bu sorunu nasıl çözebiliriz? İşte detaylı çözüm önerileri:

1. Süresi Dolmuş Token’ı Yenileyin



İlk çözümümüz, CSRF token'ının süresi dolmuşsa, kullanıcının formu tekrar göndermesini sağlamaktır. Bunun için, ASP.NET Core’da her istek geldiğinde yeni bir token oluşturmanız gerekebilir.

İlk olarak, Startup.cs dosyanızda CSRF korumasını aktif hale getirdiğinizden emin olun. Eğer token’ı doğrulamak için özel bir kod yazmadıysanız, ASP.NET Core otomatik olarak bu işlemi yapacaktır.

Startup.cs:


public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    services.AddAntiforgery(options => 
    {
        options.HeaderName = "X-CSRF-TOKEN";
    });
}


Bu ayar, her gelen istekte CSRF token’ını kontrol eder. Eğer token geçersizse, ASP.NET Core otomatik olarak bir hata döndürecektir.

2. Tarayıcı Önbelleklerini Temizleyin



Tarayıcılar, eski token'ları saklayabilir. Bu da, kullanıcılar sayfayı yeniden yüklediğinde geçersiz bir token ile istek göndermelerine neden olabilir. Bunun önüne geçmek için, JavaScript ile sayfa her yenilendiğinde eski token'ları temizlemeniz faydalı olacaktır.

JavaScript:


$(document).ready(function() {
    // Sayfa yenilendiğinde eski token'ı temizleyin
    $('input[name="__RequestVerificationToken"]').val('');
});


Bu kod, formu gönderirken eski token’ın gönderilmesini engeller. Kullanıcı yeni bir sayfa yüklediğinde yeni token alacak ve formu sorunsuzca gönderebilecektir.

3. Sunucu Tarafı Yapılandırma



Sunucu tarafında CSRF token doğrulama işlemi düzgün çalışmıyorsa, antiforgery middleware’inin doğru şekilde yapılandırıldığından emin olmalısınız. Bunun için Configure metodunu kontrol edebilirsiniz.

Configure.cs:


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseAntiforgery();
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}


Bu yapılandırma, token doğrulamasının düzgün çalışmasını sağlar ve güvenlik açıklarını en aza indirir.

Sonuç



Bu yazıda, ASP.NET Core ‘CSRF Token Expired’ hatasının çözümünü detaylı bir şekilde inceledik. İlk olarak, token’ın süresi dolmuşsa bunu yenilemeyi, ardından tarayıcı önbelleklerinin eski token’lardan arındırılmasını ve son olarak sunucu tarafı yapılandırmalarını kontrol etmeyi önerdik. Bu adımlar sayesinde, uygulamanızdaki CSRF güvenlik açığını kapatabilir ve kullanıcılarınıza daha güvenli bir deneyim sunabilirsiniz.

Unutmayın, güvenlik her zaman önceliklidir! Bu basit ama etkili adımlar, hatanın çözülmesini sağlayacak ve uygulamanızın daha güvenli olmasına katkı sunacaktır. Şimdi, bu hatadan kurtuldunuz ve güvenli bir şekilde form gönderileri gerçekleştirebilirsiniz. Artık sorunsuz bir şekilde kodlamaya devam edebilirsiniz!

İ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...

Modern Yazılım Geliştirme Süreçlerinde Yapay Zeka ve Otomasyonun Rolü: 2025’te Yeni Başlangıçlar

Yazılım geliştirme dünyası hızla evriliyor. 2025 yılına adım attığımızda, bu süreçte yapay zeka ve otomasyonun rolü hiç olmadığı kadar önemli hale geldi. Geçmişte yazılım geliştirme yalnızca kod yazmak ve sistemleri test etmekle sınırlıydı. Ancak bugünün...

Yazılım Geliştiriciler İçin Verimli Çalışma Alanı Oluşturmanın İpuçları: En İyi Araçlar ve Yöntemler

Verimli Bir Çalışma Alanı Neden Önemlidir?Yazılım geliştirici olmanın zorluklarından biri de sürekli odaklanmış ve üretken olabilmektir. Bir geliştirici olarak, işlerinizin çoğunu bilgisayar başında geçirirsiniz ve bu süre zarfında verimli bir çalışma...