---
title: 'İstek Sahteciliği'
source: 'https://academia.sh/tr/kurslar/saldiri-teknikleri/istek-sahteciligi'
course: 'Saldırı Teknikleri ve Tehdit Ortamı'
language: tr
updated: '2026-08-17T18:08:33+00:00'
license: 'CC BY-SA 4.0'
---

# İstek Sahteciliği

İstek sahteciliğinin iki yönünün ayrı zincir olarak ölçülmesi: tarayıcı yönünde beş adımın önkoşullarının kurban, tarayıcı ve sunucu arasında bölünmesi, sunucu yönünde bedelin üçüncü adımda yüzde kırkının gerçekleşmesi, on bir uçta ikisinin hiç kırılamaması, tek katmanın kaldırılmasının kırk beş işlemlik fark üretmesi ve iki yönün bedelinin ayrı birimlerde ölçülmesi.

Önceki derste kurbanın tarayıcısında kod çalışıyordu. Aynı tarayıcının, hiçbir kod
çalıştırmadan yapabileceği daha sessiz bir şey daha vardır: bir isteği kurbanın **kimliğiyle**
göndermek. İstek sahteciliği bu sınıftır ve iki yönü vardır.

Birinci yönde sahtelenen şey **kurbanın kimliğidir**: istek kurbanın tarayıcısından çıkar ve
oturum kalemini kendiliğinden yanında taşır. İkinci yönde sahtelenen şey **sunucunun ağ
konumudur**: istek sunucudan çıkar ve dışarıdan erişilemeyen bir iç uca ulaşır. İki yön aynı
sınıf adıyla anılır çünkü ikisinde de bir isteği başkasının yetkisiyle göndermek söz
konusudur; ama zincirleri, önkoşul sahipleri ve bedel birimleri ayrıdır.

## İki Zincir, İki Önkoşul Sahibi

**Tarayıcı yönü, beş adım.** (1) Kurbanın hedefte açık bir oturumu vardır — önkoşul: oturum
kalemi tarayıcıda duruyor ve süresi dolmamış. (2) Kurban, saldıranın belirlediği bir sayfaya
ulaşır — önkoşul: bir teslim kanalı var. (3) O sayfadan hedefe bir istek çıkar ve oturum
kalemi isteğe kendiliğinden eklenir — önkoşul: aynı-site ilkesi bu isteği dışarıda bırakmıyor.
(4) Uç isteği kabul eder — önkoşul: uç isteğin kaynağını kanıtlayan bir kalem istemiyor.
(5) İşlem kalıcı olur — önkoşul: işlem tek adımda tamamlanıyor.

**Sunucu yönü, beş adım.** (1) Bir uç, dışarıdan verilen bir adrese istek gönderir — önkoşul:
hedef adres istek alanından geliyor. (2) Adres çözümlemesi iç ağdaki bir adrese düşer —
önkoşul: çözümleme sonrası bir denetim yok. (3) İstek iç uca ulaşır — önkoşul: iç uç ağ
katmanında erişilebilir. (4) İç uç isteği kimlik sormadan yanıtlar — önkoşul: iç uçlar konum
temelli güveniyor. (5) Yanıt çağırana geri döner — önkoşul: yanıt gövdesi ya da hata farkı
dışarıya yansıyor.

İlk zincirin ilk iki adımının önkoşulu **kurbanın elindedir**; savunmanın orada tutunacak yeri
yoktur. İkinci zincirde hiçbir adımın önkoşulu kurbana ait değildir — üçü savunanın kendi
altyapısında, biri iç serviste. Bu, iki yönün savunma sorumluluğunun neden farklı yerlere
düştüğünü açıklar.

**TS14:** iki yön ayrı zincirdir; `sahip`, adımın önkoşulunu elinde tutan taraftır. **TS15:**
her katman tek bir yönde tek bir adımı kırar. **TS16:** bedelin birimi yöne göre değişir ve iki
birim toplanmaz. **TS17:** `egri[i]`, i. adım tamamlandığında bedelin ne kadarının
gerçekleştiğini verir.

```js
// isf/yon.mjs — istek sahteciliginin iki yonu, adim dizileri ve katmanlar (model).
// Gercek bir uc, gercek bir adres ve hicbir istek govdesi yok.
export const YON = {
  tarayici: {
    adim: ["acik-oturum", "teslim", "kendiliginden-eklenme", "ucun-kabulu", "kalicilik"],
    sahip: ["kurban", "kurban", "tarayici", "sunucu", "sunucu"],
    birim: "islem", egri: [0, 0, 0, 0, 1],
  },
  sunucu: {
    adim: ["adres-disaridan", "cozumleme", "ic-uca-ulasma", "kimliksiz-yanit", "geri-yansima"],
    sahip: ["sunucu", "ag", "ag", "ic-servis", "sunucu"],
    birim: "ic uc", egri: [0, 0, 0.4, 0.8, 1],
  },
};

export const KATMAN = [
  { ad: "ayni-site-cerez",     yon: "tarayici", kirar: 3, mesru: 2 },
  { ad: "istek-belirteci",     yon: "tarayici", kirar: 4, mesru: 5 },
  { ad: "kaynak-denetimi",     yon: "tarayici", kirar: 4, mesru: 3 },
  { ad: "yeniden-dogrulama",   yon: "tarayici", kirar: 5, mesru: 11 },
  { ad: "cikis-izin-listesi",  yon: "sunucu",   kirar: 1, mesru: 4 },
  { ad: "cozumleme-denetimi",  yon: "sunucu",   kirar: 2, mesru: 1 },
  { ad: "ag-bolutleme",        yon: "sunucu",   kirar: 3, mesru: 8 },
  { ad: "ic-uc-kimligi",       yon: "sunucu",   kirar: 4, mesru: 6 },
  { ad: "sade-yanit",          yon: "sunucu",   kirar: 5, mesru: 2 },
];

// Kurgu olcum aginin on bir ucu: yon, dagitilmis katmanlar ve yone ozgu bedel.
export const UC = [
  ["abone-portali.tarife-degis", "tarayici", ["ayni-site-cerez", "istek-belirteci"], 60],
  ["abone-portali.adres-guncelle", "tarayici", ["ayni-site-cerez"], 45],
  ["abone-portali.itiraz-ac", "tarayici", ["istek-belirteci", "kaynak-denetimi"], 30],
  ["saha-uygulamasi.is-emri-kapat", "tarayici", ["ayni-site-cerez", "yeniden-dogrulama"], 120],
  ["yonetim.esik-ayari", "tarayici", [], 8],
  ["yonetim.kullanici-yetkisi", "tarayici", ["istek-belirteci", "yeniden-dogrulama"], 4],
  ["fatura-uretimi.sablon-getir", "sunucu", ["cikis-izin-listesi", "cozumleme-denetimi"], 9],
  ["toplayici.geri-bildirim-ucu", "sunucu", ["cozumleme-denetimi", "ag-bolutleme"], 14],
  ["is-emri.harita-onizleme", "sunucu", ["sade-yanit"], 14],
  ["rapor.dis-kaynak-cek", "sunucu", [], 17],
  ["sube-ucu.baglanti-sinama", "sunucu", ["ag-bolutleme", "ic-uc-kimligi", "sade-yanit"], 6],
];

export const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
```

```js
// isf/olcum.mjs — iki yon on bir uc uzerinde kosturulur: ilk kirilan halka, denetimsiz
// adim ve gec kirmanin yone ozgu birimdeki bedeli. Rastgelelik yok.
import { YON, KATMAN, UC, yaz } from "./yon.mjs";

const ilkKirilan = (y, d) => Math.min(...KATMAN
  .filter((k) => k.yon === y && d.includes(k.ad)).map((k) => k.kirar), Infinity);
// n. adimda kirilan zincirde gerceklesmis bedel orani
const oran = (y, n) => (n === Infinity ? 1 : YON[y].egri[n - 2] ?? 0);

console.log(`2 yon, ${KATMAN.length} katman, ${UC.length} kurgu uc\n`);

console.log("1. iki yonun adim dizisi");
for (const [ad, z] of Object.entries(YON)) {
  console.log(`${ad} yonu — ${z.adim.length} adim, bedel birimi "${z.birim}", ` +
    `${KATMAN.filter((k) => k.yon === ad).length} katman`);
  z.adim.forEach((a, i) => console.log(`  ${i + 1}. ${a.padEnd(24)}onkosul sahibi: ` +
    `${z.sahip[i].padEnd(11)}tamamlaninca bedelin %${(z.egri[i] * 100).toFixed(0)}'i`));
}

const B = [-31, -10, 8, 13, 12, 8, 14];
console.log("\n2. uc basina zincir");
yaz(B, "uc", "yon", "katman", "ilk kirilan", "denetimsiz", "bedel", "gerceklesen");
const durum = UC.map(([ad, y, d, b]) => {
  const h = ilkKirilan(y, d);
  const kirilan = new Set(KATMAN.filter((k) => k.yon === y && d.includes(k.ad)).map((k) => k.kirar));
  return { ad, y, d, b, h, denetimsiz: YON[y].adim.length - kirilan.size, ger: b * oran(y, h) };
});
for (const u of durum)
  yaz(B, u.ad, u.y, u.d.length, u.h === Infinity ? "kirilmiyor" : `${u.h}. adim`,
    u.denetimsiz, u.b, u.ger.toFixed(1));
for (const y of Object.keys(YON)) {
  const k = durum.filter((u) => u.y === y);
  console.log(`${y} yonu: ${k.length} uc, toplam bedel ` +
    `${k.reduce((t, u) => t + u.b, 0)} ${YON[y].birim}, gerceklesen ` +
    `${k.reduce((t, u) => t + u.ger, 0).toFixed(1)}; kirilmayan uc ` +
    `${k.filter((u) => u.h === Infinity).length}`);
}

const C = [-20, -10, 9, 8, 15, 18];
console.log("\n3. bir katman butun uclardan kaldirilirsa");
yaz(C, "katman", "yon", "dagitim", "mesru", "kirilmaz olan", "gerceklesen fark");
for (const k of KATMAN) {
  const kume = durum.filter((u) => u.y === k.yon);
  let yeniAcik = 0, fark = 0;
  for (const u of kume) {
    const h2 = ilkKirilan(k.yon, u.d.filter((x) => x !== k.ad));
    if (u.h !== Infinity && h2 === Infinity) yeniAcik++;
    fark += u.b * oran(k.yon, h2) - u.ger;
  }
  yaz(C, k.ad, k.yon, kume.filter((u) => u.d.includes(k.ad)).length, k.mesru, yeniAcik,
    `+${fark.toFixed(1)}`);
}

const D = [-8, 13, 13, 13, 13];
console.log("\n4. bedel egrisinin bicimi");
yaz(D, "adim", "tarayici %", "sunucu %", "tarayici uc", "sunucu uc");
for (let n = 1; n <= 5; n++)
  yaz(D, `${n}.`, (YON.tarayici.egri[n - 1] * 100).toFixed(0),
    (YON.sunucu.egri[n - 1] * 100).toFixed(0),
    durum.filter((u) => u.y === "tarayici" && u.h === n).length,
    durum.filter((u) => u.y === "sunucu" && u.h === n).length);
console.log(`tarayici yonunde bedel yalnizca son adimda gerceklesir: dorduncu adimda kirmak ` +
  `bedeli sifirda tutar`);
console.log(`sunucu yonunde ucuncu adim bedelin %40'ini uretir: gec kirmak bedeli sifirlamaz`);
```

```
2 yon, 9 katman, 11 kurgu uc

1. iki yonun adim dizisi
tarayici yonu — 5 adim, bedel birimi "islem", 4 katman
  1. acik-oturum             onkosul sahibi: kurban     tamamlaninca bedelin %0'i
  2. teslim                  onkosul sahibi: kurban     tamamlaninca bedelin %0'i
  3. kendiliginden-eklenme   onkosul sahibi: tarayici   tamamlaninca bedelin %0'i
  4. ucun-kabulu             onkosul sahibi: sunucu     tamamlaninca bedelin %0'i
  5. kalicilik               onkosul sahibi: sunucu     tamamlaninca bedelin %100'i
sunucu yonu — 5 adim, bedel birimi "ic uc", 5 katman
  1. adres-disaridan         onkosul sahibi: sunucu     tamamlaninca bedelin %0'i
  2. cozumleme               onkosul sahibi: ag         tamamlaninca bedelin %0'i
  3. ic-uca-ulasma           onkosul sahibi: ag         tamamlaninca bedelin %40'i
  4. kimliksiz-yanit         onkosul sahibi: ic-servis  tamamlaninca bedelin %80'i
  5. geri-yansima            onkosul sahibi: sunucu     tamamlaninca bedelin %100'i

2. uc basina zincir
uc                             yon         katman  ilk kirilan  denetimsiz   bedel   gerceklesen
abone-portali.tarife-degis     tarayici         2      3. adim           3      60           0.0
abone-portali.adres-guncelle   tarayici         1      3. adim           4      45           0.0
abone-portali.itiraz-ac        tarayici         2      4. adim           4      30           0.0
saha-uygulamasi.is-emri-kapat  tarayici         2      3. adim           3     120           0.0
yonetim.esik-ayari             tarayici         0   kirilmiyor           5       8           8.0
yonetim.kullanici-yetkisi      tarayici         2      4. adim           3       4           0.0
fatura-uretimi.sablon-getir    sunucu           2      1. adim           3       9           0.0
toplayici.geri-bildirim-ucu    sunucu           2      2. adim           3      14           0.0
is-emri.harita-onizleme        sunucu           1      5. adim           4      14          11.2
rapor.dis-kaynak-cek           sunucu           0   kirilmiyor           5      17          17.0
sube-ucu.baglanti-sinama       sunucu           3      3. adim           2       6           0.0
tarayici yonu: 6 uc, toplam bedel 267 islem, gerceklesen 8.0; kirilmayan uc 1
sunucu yonu: 5 uc, toplam bedel 60 ic uc, gerceklesen 28.2; kirilmayan uc 1

3. bir katman butun uclardan kaldirilirsa
katman              yon         dagitim   mesru  kirilmaz olan  gerceklesen fark
ayni-site-cerez     tarayici          3       2              1             +45.0
istek-belirteci     tarayici          3       5              0              +0.0
kaynak-denetimi     tarayici          1       3              0              +0.0
yeniden-dogrulama   tarayici          2      11              0              +0.0
cikis-izin-listesi  sunucu            1       4              0              +0.0
cozumleme-denetimi  sunucu            2       1              0              +0.0
ag-bolutleme        sunucu            2       8              0              +2.4
ic-uc-kimligi       sunucu            1       6              0              +0.0
sade-yanit          sunucu            2       2              1              +2.8

4. bedel egrisinin bicimi
adim       tarayici %     sunucu %  tarayici uc    sunucu uc
1.                  0            0            0            1
2.                  0            0            0            1
3.                  0           40            3            1
4.                  0           80            2            0
5.                100          100            0            1
tarayici yonunde bedel yalnizca son adimda gerceklesir: dorduncu adimda kirmak bedeli sifirda tutar
sunucu yonunde ucuncu adim bedelin %40'ini uretir: gec kirmak bedeli sifirlamaz
```

## Önkoşulun Sahibi

Birinci çıktı iki zinciri adım adım açar ve her adımın önkoşulunu **kimin elinde tuttuğunu**
yazar. Tarayıcı yönünde iki adımın sahibi kurban, biri tarayıcı, ikisi sunucudur. Savunanın
doğrudan karar verebildiği adım sayısı beşte ikidir; kalan üçünde ancak dolaylı bir etkisi
olur.

Sunucu yönünde tablo tersine döner: iki adımın sahibi sunucunun kendisi, ikisi ağ, biri iç
servistir. **Hiçbir adımın önkoşulu kurbana ait değildir.** Bu yön bir kullanıcı hatasına
bağlı değildir; tamamen kurumun kendi yapılandırmasında geçer. Aynı sınıf adı altında
toplanan iki zincirin savunma sorumluluğu bu yüzden farklı ekiplere düşer.

## Uç Başına Kırılma

İkinci çıktı on bir ucu ölçer. Tarayıcı yönündeki altı uçtan üçü üçüncü adımda, ikisi
dördüncü adımda kırılıyor; biri hiç kırılmıyor. Sunucu yönündeki beş uçtan biri birinci,
biri ikinci, biri üçüncü, biri beşinci adımda kırılıyor; biri hiç kırılmıyor.

`gerceklesen` sütunu farkı somutlaştırır. Tarayıcı yönünde toplam bedel 267 işlemdir ve
gerçekleşen yalnız **8** — çünkü kırılan beş uçta zincir beşinci adıma varmadan durur ve
tarayıcı yönünde bedel yalnız son adımda oluşur. Sunucu yönünde toplam bedel 60 iç uçtur ve
gerçekleşen **28,2**; kırılamayan uç 17'nin tamamını, beşinci adımda kırılan uç 14'ün 11,2'sini
üretir.

`denetimsiz` sütunu ikinci bir okuma verir. En çok katmanı olan uç `sube-ucu.baglanti-sinama`
üçüncü adımda kırılıyor ve beş adımının yalnız ikisi denetimsiz; en az katmanı olan iki uçta
beş adımın beşi de denetimsiz. Arada duran uçlarda katman sayısı ile denetimsiz adım sayısı
birebir tamamlayıcı değildir, çünkü iki katman aynı adımı kırabilir: `abone-portali.itiraz-ac`
iki katman taşır ama ikisi de dördüncü adımı kırar, bu yüzden denetimsiz adım sayısı dörttür.
**İki katmanın aynı adıma düşmesi ikinci bir halka kazandırmaz.**

İki toplam yan yana yazılabilir ama toplanamaz. Biri günlük işlem, öteki erişilen iç uç
sayısıdır. Bir savunma raporu "iki uçta koruma yok" dediğinde iki farklı büyüklükten söz
etmiş olur: biri günde 8 kurgu işlemi etkiler, öteki 17 iç uca erişim açar.

## Bir Katmanın Kaldırılması

Üçüncü çıktı duyarlılık ölçümüdür: her katman bütün uçlardan kaldırılır ve gerçekleşen bedel
farkı yazılır. Dokuz katmandan **altısının farkı sıfırdır** — kaldırıldıklarında kırılma noktası
geriye kayar ama bedel değişmez, çünkü arkalarında başka bir katman durur.

Fark üretenler üç tanedir. `ayni-site-cerez` kaldırılırsa bir uç kırılmaz hâle gelir ve
gerçekleşen bedel **45 işlem** artar; meşru işe bedeli 2 ile en ucuz katmandır. `sade-yanit`
2,8, `ag-bolutleme` 2,4 fark üretir. Buna karşılık meşru işe bedeli 11 olan `yeniden-dogrulama`
kaldırıldığında fark **sıfırdır**: en pahalı katman, bu dağıtımda hiçbir şey eklemiyor.

Bu, katman seçiminin listeden değil **dağıtımdan** okunması gerektiğini gösterir. Bir katmanın
değeri kendi gücünde değil, bulunduğu uçlarda ondan önce kıran başka bir katmanın olup
olmadığındadır.

Ölçümün ters yönü de aynı sayıdan okunur. Farkı sıfır çıkan altı katmanın hiçbiri gereksiz
değildir; yalnız **bu dağıtımda** yedek durumdadırlar. Önlerindeki katman bir uçtan kalktığı
anda fark üretmeye başlarlar. Bir katmanın kaldırılıp kaldırılamayacağı sorusu bu yüzden tek
başına sorulamaz: yanıt, aynı uçta duran öteki katmanların hangi adımları tuttuğuna bağlıdır
ve dağıtım her değiştiğinde yeniden hesaplanması gerekir.

## Bedel Eğrisinin Biçimi

Dördüncü çıktı iki yönün asıl farkını verir. Tarayıcı yönünde bedel eğrisi dört adım boyunca
sıfırdır ve beşinci adımda birden %100'e çıkar. Dördüncü adımda kırmak ile birinci adımda
kırmak **aynı sonucu** verir: bedel sıfır. Bu yönde "geç kırma" diye bir şey neredeyse yoktur;
zincir ya tamamlanır ya tamamlanmaz.

Sunucu yönünde eğri kademelidir: üçüncü adım tamamlandığında bedelin %40'ı, dördüncüde %80'i
gerçekleşmiştir. Beşinci adımda kırmak — yani yanıtın dışarı yansımasını engellemek — bedelin
yalnız %20'sini önler. İç uçlara ulaşılmış, hangi servislerin yaşadığı öğrenilmiştir; yanıtın
geri dönmemesi bunu geri almaz.

**Aynı sınıf adı altındaki iki zincirde erken kırmanın kazancı aynı değildir.** Tarayıcı
yönünde son halkadan önceki her nokta eşit değerdedir; sunucu yönünde her adım bir öncekinden
pahalıdır ve savunmanın ikinci adımdan geç kalmaması gerekir.

## Özet

- İstek sahteciliğinin iki yönü ayrı zincirlerdir: birinde kurbanın kimliği, ötekinde
  sunucunun ağ konumu kullanılır. İkisi de beş adımdır ama önkoşul sahipleri farklıdır.
- Tarayıcı yönünde beş adımın 2'sinin önkoşulu kurbanın elindedir; sunucu yönünde hiçbir
  adımın önkoşulu kurbana ait değildir ve zincirin tamamı kurumun kendi yapılandırmasında geçer.
- On bir uçtan 2'sinde hiçbir halka kırılmıyor: biri günde 8 kurgu işlem, öteki 17 iç uç.
  İki sayı ayrı birimdedir ve toplanmaz.
- Dokuz katmandan 6'sının kaldırılması gerçekleşen bedeli değiştirmiyor; en ucuz katmanın
  (meşru bedel 2) kaldırılması 45 işlemlik fark üretiyor, en pahalı katmanın (meşru bedel 11)
  kaldırılması 0.
- Bedel eğrileri farklıdır: tarayıcı yönünde bedel yalnız beşinci adımda gerçekleşir, sunucu
  yönünde üçüncü adımda %40'ı, dördüncüde %80'i gerçekleşmiş olur. Geç kırmak yalnız ikinci
  yönde gerçek bir kayıp bırakır.

## Sonraki Adım

Bu dersin sunucu yönünde istek bir **adrese** gidiyordu ve adresin dışarıdan gelmesi zincirin
ilk halkasıydı. Aynı yapı, adres yerine bir **dosya yolu** olduğunda başka bir sınıfa dönüşür:
uç bir kalem adı alır, onu bir kök dizine ekler ve sonucu okur. Sonraki ders o zinciri sayar —
yol bileşeninin nereden geldiği, birleştirmeden sonra hangi denetimin kaldığı, süreç kimliğinin
okuyabildiği kalem sayısının bedeli nasıl belirlediği ve dolaylı bir tanıtıcı eşlemesinin
zinciri kaçıncı adımda kırdığı.
