SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Rehberler

Cross-Site Request Forgery (CSRF), kimliği doğrulanmış bir kullanıcının tarayıcısını kandırarak uygulamanıza istenmeyen istekler gönderir; para transferi, e-posta adresi değişikliği veya veri silme gibi işlemleri kullanıcının haberi olmadan gerçekleştirebilir. Bu rehber, web uygulamalarını CSRF'ye karşı denetlemek ve sertleştirmek isteyen geliştiriciler, teknik liderler ve güvenlik bilincine sahip işletme sahipleri içindir. Her adımı sırayla uygulayın; sonunda katmanlı ve sağlam CSRF savunmalarınız hazır olacaktır.

01

CSRF Tehdit Modelini Anlayın

Herhangi bir savunma kodu yazmadan önce uygulamanızın tam olarak nerelerde açıkta olduğunu haritalandırın. CSRF yalnızca durum değiştiren işlemleri (veri değiştiren veya bir eylemi tetikleyen her şeyi) etkiler ve yalnızca kurbanın zaten kimliği doğrulanmış olduğu durumlarda geçerlidir. Salt okunur GET istekleri genellikle güvenlidir; ancak cookie tabanlı kimlik doğrulamaya dayanan her POST, PUT, PATCH ve DELETE uç noktası potansiyel bir hedeftir.

  • Durumu değiştiren tüm uç noktaları listeleyin: form gönderimleri, hesap güncellemeleri, ödemeler, silme işlemleri ve yönetici eylemleri.
  • Hangi uç noktaların kimlik doğrulama için oturum cookie'lerine veya otomatik gönderilen diğer kimlik bilgilerine dayandığını doğrulayın.
  • CORS aracılığıyla çapraz kaynaklı istekleri kabul eden uç noktaları işaretleyin — bunlar dikkatli bir inceleme gerektirir.
  • Üçüncü taraf entegrasyonlarına veya web kancalarına (webhook) açık olan uç noktaları belgeleyin; bunlar genellikle özel işlem gerektirir.
  • Uygulama çerçevenizin yerleşik CSRF ara yazılımına sahip olup olmadığını ve şu anda etkin olup olmadığını kontrol edin.
02

Senkronizatör Token Modelini Uygulayın

Senkronizatör token modeli, CSRF savunmasının altın standardıdır. Sunucu, kullanıcının oturumuyla bağlantılı gizli ve tahmin edilemez bir token oluşturur, bunu her HTML formuna gizli alan olarak yerleştirir ve ardından her gelen durum değiştiren istekte doğrular. Farklı bir kaynaktaki saldırgan bu token'ı okuyamaz veya taklit edemez.

  • Oturum başına (veya yüksek güvenlikli akışlar için istek başına) kriptografik olarak rastgele bir token (en az 128 bit entropi) oluşturun.
  • Token'ı sunucu tarafında kullanıcının oturumunda saklayın — yalnızca istemciden gönderilen bir token'a güvenmeyin.
  • Token'ı her HTML formuna gizli bir giriş olarak ekleyin: <input type="hidden" name="_csrf" value="{token}">.
  • AJAX istekleri için token'ı bir meta etiketten veya cookie'den okuyun ve özel bir istek başlığında gönderin (örn. X-CSRF-Token).
  • Sunucuda, gönderilen token oturum token'ıyla eşleşmediğinde durum değiştiren her isteği reddedin — HTTP 403 döndürün.
  • Ayrıcalık düzeyi değişikliklerinden sonra (örn. oturum açma, rol değişikliği) CSRF token'ını yenileyin.
  • Kendi çözümünüzü geliştirmek yerine çerçevenizin yerleşik CSRF korumasını kullanın (Django'nun {% csrf_token %}, Laravel'in , Rails'in protect_from_forgery, Spring Security'nin CSRF filtresi vb.).
03

SameSite Cookie Özniteliğini Yapılandırın

SameSite cookie özniteliği, tarayıcılara çapraz site istekleriyle cookie göndermemelerini söyler; bu da sunucu tarafında token doğrulama gerektirmeyen güçlü bir ikinci CSRF savunma katmanı sağlar. Tüm modern tarayıcılar tarafından desteklenir ve her oturum ile kimlik doğrulama cookie'sinde ayarlanmalıdır.

  • Çapraz site gezintisinin oturumu taşımasına gerek olmayan oturum cookie'lerinde (örn. bankacılık panoları, yönetici panelleri) SameSite=Strict ayarlayın.
  • Diğer tüm oturum cookie'lerinde en az SameSite=Lax ayarlayın — bu, üst düzey GET gezintilerine hâlâ izin verirken çapraz site POST isteklerinden gelen CSRF'yi engeller.
  • Cookie'nin gerçekten çapraz site olarak gönderilmesi gerekmediği sürece (örn. gömülü widget'lar) asla SameSite=None kullanmayın; her zaman Secure ile eşleştirin.
  • Tüm cookie'lerde Secure bayrağını ayarlayarak yalnızca HTTPS üzerinden gönderilmelerini sağlayın.
  • JavaScript'in oturum cookie'lerini okumasını önlemek için HttpOnly bayrağını ayarlayın; bu, XSS tabanlı CSRF saldırılarını azaltır.
  • Set-Cookie başlıklarınızı tarayıcı Geliştirici Araçları veya otomatik bir tarayıcı kullanarak denetleyin — Sensagraph, sitenizdeki cookie güvenlik özniteliklerini otomatik olarak kontrol eder.
04

Origin ve Referer Başlıklarını Doğrulayın

Origin ve Referer istek başlıklarını kontrol etmek, durum doğrulamasından önce bile pek çok CSRF saldırısını durdurabilecek hafif ve durumsuz bir sunucu tarafı kontrolüdür. Tarayıcılar bu başlıkları çapraz site isteklerine ekler; kendi ön ucunuzdan gelen meşru aynı site istekleri bu başlıklarda sizin etki alanınızı taşır.

  • Durum değiştiren isteklerde Origin başlığını okuyun. Mevcut olup izin verilen kaynağınızla eşleşmiyorsa isteği HTTP 403 ile reddedin.
  • Origin yoksa Referer başlığına geri dönün ve uygulamanızın temel URL'siyle başladığını doğrulayın.
  • Hem Origin hem de Referer'ın olmadığı ve isteğin bilinen güvenli bir bağlamdan gelmediği istekleri reddedin.
  • İzin verilen kaynaklar için açık bir beyaz liste tutun — alt dize veya sonek eşleştirmesi kullanmayın, bu atlatılabilir (örn. evil.etkilanininiz.com).
  • Yalnızca Referer kontrolüne güvenmeyin — gizlilik araçları ve HTTPS-to-HTTP geçişleri tarafından bastırılabilir.
05

Yedek Olarak Double Submit Cookie Modelini Kullanın

Senkronizatör token'larının pratik olmadığı durumlarda — örneğin merkezi oturum deposu olmayan durumsuz mimarilerde veya dağıtık sistemlerde — double submit cookie modeli kullanılabilir bir alternatif sunar. Rastgele bir değer hem cookie hem de istek parametresi olarak saklanır; sunucu ikisinin eşleşip eşleşmediğini kontrol eder.

  • Kriptografik olarak rastgele bir değer oluşturun ve bunu bir cookie olarak ayarlayın (JavaScript'in okuyabilmesi için HttpOnly değil).
  • Aynı değeri her durum değiştiren istekte gizli form alanı veya özel başlık olarak ekleyin.
  • Sunucuda, cookie değeri ile gönderilen değerin eşleştiğini doğrulayın — Aynı Kaynak İlkesi nedeniyle çapraz kaynaklı bir saldırgan cookie'yi okuyamaz.
  • Sunucu tarafı gizli anahtarıyla token'ı HMAC ile imzalayan imzalı double submit cookie varyantını tercih edin; bu, saldırganın eşleşen bir çift oluşturmasını önler.
  • Uygulamanız alt alan adı ele geçirmeye karşı savunmasızsa bu modeli kullanmayın; üst etki alanı için cookie ayarlayabilecek bir saldırgan savunmayı atlatabilir.
06

API Uç Noktalarını Koruyun

REST ve GraphQL API'lerinin JSON kullandığı için CSRF'ye karşı güvenli olduğu yaygın bir yanılgıdır; ancak cookie kabul ederlerse ve uygun içerik türü veya token kontrollerini zorunlu kılmazlarsa hâlâ savunmasızdırlar. Saldırganlar, uygun korumadan yoksun API'lerde durum değişikliklerini tetiklemek için HTML formları veya fetch istekleri kullanabilir.

  • Tüm JSON API uç noktalarında Content-Type: application/json zorunlu kılın — HTML formları bu içerik türünü gönderemez, bu da basit CSRF vektörlerini engeller.
  • Cookie kimlik doğrulamalı tüm API uç noktalarına, tıpkı HTML formlarında yaptığınız gibi, CSRF token doğrulaması uygulayın.
  • Cookie yerine yalnızca Authorization başlıkları (Bearer token, API anahtarı) kullanan API'ler için CSRF geçerli değildir — API istemcilerinizin oturum cookie'si de gönderip göndermediğini doğrulayın.
  • CORS politikasını gözden geçirin: Access-Control-Allow-Origin'da yalnızca güvenilir kaynaklara izin verin ve asla Access-Control-Allow-Credentials: true ile * birlikte kullanmayın.
  • URL parametrelerinde kimlik bilgisi kabul etmekten kaçının (örn. ?token=...); bunlar sunucu günlüklerine ve tarayıcı geçmişine kaydedilir.
  • GraphQL kullanıyorsanız, mutasyonlar anlam olarak durum değiştirdiğinden CSRF token'larını GraphQL katmanı içinde değil HTTP taşıma düzeyinde uygulayın.
07

Oturum Yönetimini Sertleştirin

CSRF saldırıları, sunucunun kimliği doğrulanmış bir oturuma duyduğu güveni istismar eder. Oturum yönetiminizi sıkılaştırmak, başarılı bir CSRF girişiminin pencerini ve etkisini azaltır.

  • Oturum sabitleme saldırılarını önlemek için oturum açma, rol değişikliği ve ayrıcalık yükseltme işlemlerinden sonra oturum kimliklerini yenileyin.
  • Oturum cookie'sinin süresini mümkün olan en kısa pratik süreye ayarlayın; mutlak süre sonlarına ek olarak boşta kalma zaman aşımlarını (örn. 15–30 dakika) kullanın.
  • Oturum cookie'lerini gerektiği kadar dar bir yola ve etki alanına kapsayın: Path=/ özniteliğini yalnızca uygulamanızın gerçekten tüm yollar boyunca ihtiyaç duyduğu durumlarda kullanın.
  • Sunucu tarafı oturumunu tam olarak geçersiz kılan bir çıkış uç noktası uygulayın; yalnızca istemci tarafı cookie'sini temizlemek yeterli değildir.
  • E-posta, şifre veya ödeme ayrıntılarını değiştirme gibi yüksek riskli işlemler için yeniden kimlik doğrulama (adım yükseltme kimlik doğrulaması) gerektirilmesini değerlendirin — geçerli bir CSRF token'ı bile taze kimlik bilgisi isteyen bir saldırgana yardımcı olamaz.
  • CSRF token doğrulama hatalarındaki ani artışları kaydedin ve uyarı gönderin; bu, aktif bir saldırı kampanyasına işaret edebilir.
08

Test Edin ve Sürekli İzleyin

CSRF savunmaları, çerçeve yükseltmeleri, yeniden yapılandırma veya yeni özellik geliştirme sırasında sessizce bozulabilir. Sürekli test, korumalarınızın zaman içinde etkili kalmasını sağlar.

  • Her durum değiştiren uç noktayı, geçerli bir CSRF token'ı olmadan çapraz kaynaklı bir HTML formu veya fetch isteği oluşturarak manuel olarak test edin — sunucu HTTP 403 döndürmelidir.
  • CSRF token doğrulama testlerini otomatik test paketinize (birim ve entegrasyon testleri) ekleyin; böylece gerilimler CI/CD ardışık düzeninde yakalanır.
  • Özellikle büyük sürümler veya mimari değişikliklerden sonra CSRF'ye odaklanan periyodik sızma testleri gerçekleştirin.
  • Üçüncü taraf kitaplıkları ve çerçeveleri CSRF ile ilgili CVE'ler için inceleyin ve yamaları derhal uygulayın.
  • Tüm web mülklerinizde eksik veya yanlış yapılandırılmış CSRF korumalarını sürekli kontrol etmek için otomatik tarama kullanın — Sensagraph, sürekli taramasının bir parçası olarak yaygın CSRF yanlış yapılandırmalarını algılar.
  • Content Security Policy (CSP) başlıklarınızı gözden geçirin — satır içi komut dosyalarına izin vermeyen güçlü bir CSP, XSS yardımlı CSRF atlatma riskini azaltır.
  • CSRF ile ilgili güvenlik açığı açıklamalarından önceden haberdar olmak için teknoloji yığınınız için güvenlik duyurularına abone olun (örn. Django, Laravel, Spring).

Sıkça sorulan sorular

Cross-Site Request Forgery (CSRF), kötü niyetli bir web sitesinin kimliği doğrulanmış bir kullanıcının tarayıcısını kandırarak uygulamanıza sahte bir istek göndermesini sağlayan bir saldırıdır. Tarayıcı oturum cookie'lerini otomatik olarak eklediğinden sunucu, sahte isteği meşru bir istekten ayırt edemez. Bu durum; hesap ayrıntılarının değiştirilmesi, para transferi veya veri silinmesi gibi yetkisiz eylemlere yol açabilir — hepsi kullanıcının haberi olmadan.

Hayır. HTTPS verileri aktarım sırasında şifreler, ancak CSRF'yi önlemez; çünkü saldırı trafiği ele geçirmez, tarayıcının otomatik cookie gönderme davranışını kötüye kullanır. HTTPS genel güvenlik için hâlâ zorunludur, ancak token'lar ve SameSite cookie özniteliği gibi açık CSRF savunmaları uygulamanız gerekir.

SameSite=Lax, çapraz site POST, PUT, PATCH ve DELETE istekleri aracılığıyla gerçekleştirilen CSRF saldırılarını engeller; bu da CSRF vektörlerinin büyük çoğunluğunu kapsar. Ancak durum değişikliklerini tetikleyen üst düzey GET gezintilerini korumaz (tasarım gereği bunlardan kaçınmalısınız) ve eski tarayıcılar tarafından desteklenmeyebilir. Derinlemesine savunma için SameSite cookie'leri CSRF token'larıyla birlikte kullanmalısınız.

Evet, API'niz cookie tabanlı kimlik doğrulama kullanıyorsa. Tarayıcılar standart bir HTML formu aracılığıyla JSON gönderemese de cookie taşıyan çapraz site fetch istekleri başlatabilir. API'niz CSRF token'larını doğrulamıyor veya katı Content-Type kontrolü uygulamıyorsa hâlâ savunmasız olabilir. Yalnızca Authorization başlıkları (Bearer token) kullanan ve asla cookie kullanmayan API'ler genellikle CSRF'ye karşı savunmasız değildir.

En azından kullanıcı oturumu başına yeni bir CSRF token'ı oluşturun ve oturum açma ya da ayrıcalık değişikliklerinden sonra yenileyin. Çok yüksek güvenlikli işlemler için (örn. finansal işlemler) istek başına token'ları değerlendirin. İstek başına yenileme daha güçlü güvenlik sağlar ancak tarayıcı geri düğmesi ve birden fazla açık sekme ile kullanılabilirlik sorunlarına yol açabilir; bu nedenle uygulamanız için dengeyi gözetin.

Evet. Sensagraph'ın sürekli otomatik taraması; formlarda eksik CSRF token'ları, yanlış SameSite cookie ayarları ve CSRF istismarına olanak tanıyabilecek yanlış yapılandırılmış CORS politikaları gibi yaygın CSRF yanlış yapılandırmalarını kontrol eder.