
Siteler Arası İstek Sahteciliği: Formunuzu Başkası Gönderiyor
Kullanıcı sitenize giriş yapmış durumda. Sonra başka bir sekmede tanımadığı bir sayfayı açıyor ve o sayfa sessizce sizin sitenize bir istek gönderiyor. Tarayıcı, kullanıcının oturum çerezini otomatik olarak ekliyor. Sonuç: kullanıcı adına şifre değişikliği, para transferi veya hesap silme.
Bu yazı, bu saldırıyı ve korunma yöntemini ele alıyor.
Saldırı Nasıl Çalışır
- Kullanıcı sitenizde oturum açar.
- Başka bir sayfa isteği tetikler.
- Tarayıcı çerezi otomatik ekler.
- Sunucu isteği meşru sayar.
Üçüncü adım saldırının tüm gücünü açıklar: tarayıcılar bir adrese istek yaparken o adrese ait çerezleri isteği kimin başlattığına bakmaksızın ekler — bu yüzden sizin siteniz, isteğin gerçekten kullanıcıdan geldiğini varsayar.
Saldırgan yanıtı okuyamaz.
Ama işlemin gerçekleşmesi için okumasına gerek yoktur.
Silme veya güncelleme işlemleri tek yönlü çalışır.
Nerelerde Görülür
| İşlem | Risk |
|---|---|
| Şifre değiştirme | Hesap ele geçirilir |
| E-posta adresi değiştirme | Kurtarma yolu çalınır |
| Sipariş oluşturma | Maddi zarar |
| Yorum gönderme | İtibar zararı |
İkinci satır en tehlikeli senaryodur: e-posta adresini değiştiren bir istek başarıya ulaşırsa, saldırgan ardından şifre sıfırlama başlatarak hesabı tamamen devralabilir — kullanıcı ne olduğunu bile anlamaz.
Bu nedenle hassas alan değişiklikleri ek doğrulama istemelidir.
Mevcut şifreyi sormak etkili bir katmandır.
Dördüncü satır ise daha az zararlı ama daha sık istismar edilir.
Jeton Yöntemi
- Formda gizli bir değer bulunur.
- Değer oturuma bağlıdır.
- Sunucu gönderimde doğrular.
İkinci madde korumanın temelidir: jeton kullanıcının oturumuna bağlı ve tahmin edilemez olduğu için saldırgan onu bilemez — çerezler otomatik gönderilse bile doğru jeton olmadan istek reddedilir.
Saldırgan sayfanızın içeriğini okuyamadığı için jetonu alamaz.
Bu kısıt tarayıcı güvenlik modelinden gelir.
Jeton her formda bulunmalıdır.
Nerede Doğrulanmalı
- Durum değiştiren her istekte.
- Yalnızca okuma yapan isteklerde gerekmez.
- Merkezî bir katmanda yapılmalı.
Üçüncü madde en sık yapılan hatayı önler: jeton kontrolünü her forma tek tek eklemek, bir formda unutulmasına yol açar ve tek bir korumasız form tüm koruma çabasını boşa çıkarır.
Kontrol, tüm isteklerin geçtiği ortak bir noktada yapılmalıdır.
Muaf tutulacak adresler açıkça listelenmelidir.
Varsayılan davranış korumak olmalıdır.
Çerez Tarafındaki Koruma
| Ayar | Etkisi |
|---|---|
| Katı mod | Dış istekte çerez hiç gitmez |
| Gevşek mod | Sadece bağlantı tıklamalarında gider |
| Kapalı | Her durumda gider |
İkinci satır iyi bir dengedir: gevşek mod, başka siteden gelen form gönderimlerinde çerezin eklenmesini engellerken kullanıcının bağlantıya tıklayarak gelmesini bozmaz — bu tek ayar, saldırıların büyük kısmını kapatır.
Modern tarayıcılar bunu varsayılan yapmıştır.
Ancak eski tarayıcılar bu ayarı yok sayar.
Bu nedenle jeton yöntemi hâlâ gereklidir.
API Uç Noktaları
- Çerezle kimlik doğrulanıyorsa risk vardır.
- Başlıkla doğrulanıyorsa risk azdır.
- İçerik türü kontrolü ek katmandır.
İkinci madde önemli bir ayrımı gösterir: kimlik bilgisi çerez yerine özel bir başlıkta taşınıyorsa saldırgan bu başlığı ekleyemez çünkü tarayıcı onu otomatik göndermez — bu, jeton ihtiyacını ortadan kaldırır.
Mobil uygulamalar genellikle bu modeli kullanır.
Web arayüzleri ise çoğunlukla çerez kullanır.
Aynı uç nokta iki modeli de destekliyorsa koruma korunmalıdır.
Bağlantıyla İşlem Yapmamak
- Silme işlemi bağlantıyla yapılmamalı.
- Bağlantılar önceden yüklenebilir.
- Form kullanılmalı.
İkinci madde beklenmedik bir hasar kaynağıdır: bir görsel etiketi bile silme adresini çağırabilir — üstelik tarayıcılar ve bazı araçlar bağlantıları önceden yükleyerek istemeden işlem tetikleyebilir.
Bu, saldırı olmadan da veri kaybına yol açar.
Arama motoru tarayıcıları da bu adresleri ziyaret eder.
Durum değiştiren işlemler yalnızca form gönderimiyle yapılmalıdır.
Korumayı Test Etmek
- Jetonsuz istek gönderin.
- Reddedilmelidir.
- Her form için deneyin.
Üçüncü madde kapsamı garanti eder: korumayı yalnızca bir formda test etmek yanıltıcıdır — merkezî kontrol kurulmamışsa bazı formlar korumasız kalmış olabilir ve bu ancak tek tek denenerek anlaşılır.
Bu test tarayıcı geliştirici araçlarıyla yapılabilir.
Jeton alanı silinip form gönderilir.
Sonuç hata olmalıdır.
Kullanıcı Deneyimi
| Durum | Doğru davranış |
|---|---|
| Jeton süresi dolmuş | Anlaşılır mesaj göster |
| Form uzun süre açık kalmış | Veriyi koru |
| Oturum düşmüş | Girişe yönlendir |
İkinci satır çok can sıkıcı bir deneyimi önler: uzun bir formu doldururken jetonu süresi dolan kullanıcı, gönderdiğinde hata alıp tüm yazdıklarını kaybederse bu, güvenlik değil kullanıcı kaybı üretir.
Form verisi hata sayfasında korunmalıdır.
Kullanıcı yeniden giriş yapıp devam edebilmelidir.
Bu ayrıntı, koruma ile kullanılabilirliği uzlaştırır.
Oturum ve çerez ayarlarını kendiniz yapılandırabilmek için sunucu tarafı denetimi gerekir; Linux hosting paketleri ile güvenlik ayarlarınızı ihtiyacınıza göre düzenleyebilirsiniz.
Sonuç
Bu saldırının gücü basit bir tarayıcı davranışından gelir: tarayıcılar bir adrese istek yaparken çerezleri, isteği kimin başlattığına bakmaksızın ekler. Korumayı jetonla kurun ama kontrolü her forma tek tek eklemeyin — tek bir korumasız form tüm çabayı boşa çıkarır. Çerezde gevşek modu etkinleştirin ve durum değiştiren işlemleri asla bağlantıyla yapmayın.
Sıkça Sorulan Sorular (SSS)
Saldırgan oturumumu nasıl kullanabiliyor?
Kullanmıyor; tarayıcı kullanıyor. Tarayıcılar bir adrese istek yaparken o adrese ait çerezleri isteği kimin başlattığına bakmaksızın ekler. Saldırgan yanıtı okuyamaz ama silme veya güncelleme gibi tek yönlü işlemler için okumasına gerek yoktur.
Jeton neden işe yarıyor?
Jeton kullanıcının oturumuna bağlı ve tahmin edilemezdir; saldırgan sayfanızın içeriğini okuyamadığı için onu alamaz. Çerezler otomatik gönderilse bile doğru jeton olmadan istek reddedilir.
Çerez ayarı tek başına yeterli mi?
Büyük ölçüde koruma sağlar ama tek başına yeterli değildir. Gevşek mod, başka siteden gelen form gönderimlerinde çerezin eklenmesini engeller; ancak eski tarayıcılar bu ayarı yok sayar, bu yüzden jeton yöntemi hâlâ gereklidir.
Silme işlemini bağlantıyla yapabilir miyim?
Yapmayın. Bir görsel etiketi bile silme adresini çağırabilir; ayrıca tarayıcılar, bazı araçlar ve arama motoru tarayıcıları bağlantıları önceden yükleyerek istemeden işlem tetikleyebilir. Durum değiştiren işlemler yalnızca form gönderimiyle yapılmalıdır.