Form gönderen gerçekten sizin siteniz mi?
CSRF (Cross-Site Request Forgery) saldırılarına karşı koruma sağladık. Kötü niyetli bir site, kullanıcı adına işlem yapmaya çalışırsa engelleniyor.
Düşünün ki bir banka sitesine giriş yaptınız. Sonra başka bir siteye girdiniz. O kötü site, sizin adınıza bankaya "para transfer et" komutu göndermeye çalışabilir. CSRF token bunu engeller: "Bu istek gerçekten bizim sitemizden mi geliyor?"
Her form'a otomatik olarak gizli bir CSRF token eklenir.
Form verisiyle birlikte token da sunucuya gönderilir.
Sunucu token'ı session'daki ile karşılaştırır.
Token eşleşirse işlem yapılır, yoksa 419 hatası verilir.
Form işlenir, kullanıcı başarılı mesajı görür.
"419 Page Expired" hatası, istek reddedilir.
Token arka planda çalışır, kullanıcı fark etmez
Uzun süre beklerseniz sayfa yenileme gerekebilir
Tüm formlar (favori, ödeme, profil) korumalı
AJAX istekleri de X-CSRF-TOKEN header ile korunur
Form gönderdiğinizde sistem isteğin gerçekten sizin tarayıcınızdan gelip gelmediğini doğrular. İşte CSRF korumasının teknik işleyişi:
Sayfa yüklendiğinde Str::random(40) ile 40 karakterlik rastgele token üretilir ve session(['_token' => $token]) ile saklanır.
Blade'de @csrf direktifi kullanılır. Bu, <input type="hidden" name="_token" value="..."> olarak HTML'e dönüşür.
Form submit edildiğinde _token değeri POST verisiyle birlikte sunucuya gönderilir. AJAX isteklerinde X-CSRF-TOKEN header kullanılır.
VerifyCsrfToken middleware'i her POST/PUT/DELETE isteğinde devreye girer. $except dizisinde tanımlı URL'ler hariç tutulur.
hash_equals(session('_token'), $request->_token) ile gönderilen token session'daki ile karşılaştırılır. Timing attack'a karşı güvenli karşılaştırma yapılır.
Token eşleşmezse TokenMismatchException fırlatılır ve 419 hata sayfası gösterilir. Kullanıcı sayfayı yenileyerek yeni token almalıdır.
(Cross-Site Request Forgery)
Başka siteden sahte istek gönderme saldırısı. Sahte imza gibi.
(Jeton/Belirteç)
Rastgele üretilen gizli kod. Her form'da benzersiz.
(Sayfa Süresi Doldu)
Token geçersiz olduğunda gösterilen hata sayfası.
(Oturum)
Kullanıcıya özel geçici veri deposu. Token burada saklanır.