CSRF Nedir?
CSRF (Cross-Site Request Forgery), kötü niyetli kişilerin bir kullanıcının kimlik bilgilerini kullanarak kötü amaçlı isteklerde bulunmalarını sağlayan bir saldırıdır. Web uygulamanızda kullanıcıların güvenliğini sağlamak için, CSRF koruması devreye girer. Bu, her form gönderimi için özel bir token (anahtar) kullanarak doğrulama yapmanızı sağlar.
Bu hatayla karşılaştığınızda, uygulamanızın güvenliği için kritik bir adımı atlamış olabilirsiniz. Şimdi gelin, bu hatayı nasıl düzeltebileceğinizi keşfedelim.
CSRF Token Mismatch Hatası Nedir?
“CSRF Token Mismatch” hatası, genellikle form gönderimi sırasında gerçekleşir. Form verilerinizin, gönderim sırasında beklenen token ile uyuşmadığı durumlarda ortaya çıkar. Bu, genellikle CSRF token’ının eksik olması veya yanlış bir şekilde gönderilmesi durumunda meydana gelir.
CSRF Hatasını Çözmek İçin Adımlar
İlk adımda, ASP.NET Core’daki CSRF korumasını anlamak oldukça önemlidir. Eğer bir form göndermeyi planlıyorsanız, bu token'ı doğru şekilde kullanmanız gerekir. İşte hatayı çözmek için izlemeniz gereken adımlar:
1. CSRF Token’ını Formda Doğru Kullanın
Formlarınızda CSRF token’ını kullandığınızdan emin olun. ASP.NET Core, her form için bir token oluşturur. Eğer formunuzda bu token’ı kullanmazsanız, “CSRF Token Mismatch” hatası alırsınız. İşte doğru kullanım örneği:
Bu kod parçası, ASP.NET Core’daki `@Html.AntiForgeryToken()` yardımcı fonksiyonunu kullanarak CSRF token’ını formunuza dahil eder. Eğer bu satır eksikse, gönderilen formun doğrulaması başarısız olur ve hata alırsınız.
2. CSRF Middleware'ini Kontrol Edin
ASP.NET Core uygulamanızda CSRF korumasının etkinleştirildiğinden emin olmalısınız. Bunun için `ConfigureServices` metodunda `AddAntiforgery` metodunun çağrıldığından emin olun:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddRazorRuntimeCompilation();
services.AddAntiforgery(options =>
{
options.HeaderName = "X-CSRF-TOKEN";
});
}
Bu, CSRF token’ını belirli başlıklarda göndermenizi sağlar ve güvenlik seviyesini arttırır.
3. Header ile CSRF Token Gönderin
Bir başka yaygın sorun, JavaScript kullanarak AJAX istekleri gönderirken CSRF token'ının başlıkla birlikte gönderilmemesidir. Bu durumda, JavaScript tarafında token'ı almak ve başlık olarak göndermek gerekecektir. İşte nasıl yapılacağı:
// JavaScript kodu
$.ajax({
type: 'POST',
url: '/api/someendpoint',
data: formData,
beforeSend: function (xhr) {
var token = $('input[name="__RequestVerificationToken"]').val();
xhr.setRequestHeader('X-CSRF-TOKEN', token);
},
success: function (response) {
// Başarılı işlem
}
});
Burada, token her AJAX isteği ile birlikte doğru başlık altında gönderiliyor.
4. Tarayıcı Önbelleğini Temizleyin
Bazen CSRF hatasının nedeni tarayıcı önbelleği olabilir. Tarayıcıda eski token’lar veya hatalı bir doğrulama olabilir. Bu durumu engellemek için tarayıcı önbelleğini temizlemeyi deneyin veya token doğrulama sürecini sıfırlayın.
5. Token’ın Süresinin Dolmadığından Emin Olun
Token’lar genellikle belirli bir süre için geçerlidir. Süresi dolmuş bir token ile istek yapıldığında, bu hata alınabilir. Süresi dolmuş token'ları kontrol edin ve gerekirse token sürelerini uzatın.
Sonuç
CSRF Token Mismatch hatası, genellikle basit bir konfigürasyon hatasından kaynaklanır, ancak doğru şekilde ele alındığında kolayca çözülebilir. Yukarıdaki adımları izleyerek bu hatayı düzeltebilir ve web uygulamanızın güvenliğini artırabilirsiniz. Unutmayın, güvenlik, yazılım geliştirmede her zaman öncelikli olmalıdır.