# CSRF (Siteler Arası İstek Sahteciliği (Cross-Site Request Forgery))

Adres: https://softwaredictionary.org/tr/terimler/csrf
Kategori: Güvenlik
Son güncelleme: 2026-09-29
Okunuşu: sisörf ya da si-es-ar-ef

Kısaca: CSRF, oturum açmış kullanıcının tarayıcısını güvenilir bir siteye istenmeyen istek göndermeye kandıran, sitenin de gerçek kullanıcı eylemi sandığı saldırıdır.

## CSRF nedir?

Cross-site request forgery, tarayıcıların çerezleri isteklere otomatik olarak eklemesinden yararlanır. Bankanızda oturum açmışken kötü amaçlı bir sayfayı ziyaret ederseniz, bu sayfa arka planda bankaya bir form gönderebilir; tarayıcınız oturum çerezinizi isteğe ekler ve banka, sizden gelmiş meşru bir istek görür.

Saldırgan yanıtı asla görmez ve parolanızı öğrenmez; yalnızca sitenin e-posta adresini değiştirmek, para transfer etmek veya veri silmek gibi bir eylemi gerçekleştirmesini sağlar. CSRF'in yalnızca veri okuyan isteklere değil, durumu değiştiren isteklere odaklanmasının nedeni budur.

Başlıca savunmalar anti-CSRF token'ları ve `SameSite` çerezleridir. CSRF token'ı, sunucunun kendi formlarına gömdüğü ve durumu değiştiren her istekte doğruladığı, rastgele ve tahmin edilemez bir değerdir; üçüncü taraf bir site bunu bilemez. Oturum çerezlerini `SameSite=Lax` veya `SameSite=Strict` olarak ayarlamak, tarayıcıların çerezleri çoğu siteler arası istekte göndermesini engeller; `Origin` başlığını kontrol etmek ise bir katman daha ekler.

`GET` isteklerinin yan etkisiz tutulması da önemlidir; çünkü bağlantılar ve görseller bu istekleri her yerden tetikleyebilir. Çerez yerine `Authorization` başlığında token ile kimlik doğrulayan API'ler, tarayıcılar bu başlığı asla otomatik eklemediği için genellikle CSRF'e açık değildir. CSRF, XSS'ten farklıdır: CSRF başka bir siteden sahte istek gönderir, XSS ise saldırganın kodunu hedef sitenin içinde çalıştırır.

## Önemli noktalar

- CSRF, tarayıcıların otomatik gönderdiği çerezlerden yararlanır.
- Veri okumayı değil, durumu değiştiren eylemleri hedefler.
- Anti-CSRF token'ları, isteğin gerçek sitenin kendi sayfalarından geldiğini kanıtlar.
- `SameSite` çerezler, siteler arası çerez gönderiminin çoğunu engeller.
- `GET` istekleri asla veriyi değiştirmemelidir.

## Örnek: Savunmasız ve korumalı form işleyici (Express)

```javascript
// Vulnerable: any website can submit this form on the user's behalf
app.post("/email", requireLogin, (req, res) => {
  updateEmail(req.user, req.body.email);
  res.sendStatus(204);
});

// Protected: require a secret token that only our own form contains
app.post("/email", requireLogin, (req, res) => {
  if (req.body.csrfToken !== req.session.csrfToken) {
    return res.status(403).send("Invalid CSRF token");
  }
  updateEmail(req.user, req.body.email);
  res.sendStatus(204);
});
```

## Sık sorulan sorular

**CSRF ile XSS arasındaki fark nedir?**

CSRF, kullanıcının tarayıcısının farklı ve kötü amaçlı bir siteden güvenilir bir siteye istek göndermesini sağlar; XSS ise betiği güvenilir sitenin içinde çalıştırır. Enjekte edilen betik çoğu CSRF korumasını aşabileceğinden XSS genellikle daha tehlikelidir.

**SameSite çerezleri CSRF'i engeller mi?**

`SameSite=Lax` veya `SameSite=Strict`, çerezleri siteler arası isteklerde göndermeyerek çoğu CSRF saldırısını engeller; bazı tarayıcılar bu özniteliği olmayan çerezleri varsayılan olarak `Lax` sayar. Yine de derinlemesine savunma için CSRF token'ları ya da `Origin` kontrolleriyle birlikte kullanılması önerilir.

**JWT tabanlı API'lerin CSRF korumasına ihtiyacı var mı?**

Token bir çerezde saklanıyorsa evet; çünkü tarayıcı onu otomatik gönderir. Token bir `Authorization` başlığında elle gönderiliyorsa CSRF genellikle sorun olmaz, ancak bu durumda token'ın XSS'e karşı korunması gerekir.

## Kaynaklar

- [OWASP: Cross Site Request Forgery (CSRF)](https://community.owasp.org/attacks/csrf)
- [OWASP Cheat Sheet: Cross-Site Request Forgery Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
