---
title: 'Dizin Geçişi'
source: 'https://academia.sh/tr/kurslar/saldiri-teknikleri/dizin-gecisi'
course: 'Saldırı Teknikleri ve Tehdit Ortamı'
language: tr
updated: '2026-08-17T18:08:33+00:00'
license: 'CC BY-SA 4.0'
---

# Dizin Geçişi

Dizin geçişinin beş adımlık zincir ve erişilebilir kalem sayımı olarak ölçülmesi: otuz kalemlik kurgu envanterde kök denetiminin kalemi on ikiye ve duyarlılığı yediye indirmesi, dar süreç kimliğinin bölme içinde hiçbir kalemi çıkarmaması, tanıtıcı eşlemesinin zinciri ikinci adımda kırıp on kalem bırakması ve hiçbir adımı kırmayan bölmenin duyarlılığı kırk birden yirmiye düşürmesi.

Önceki dersin sunucu yönünde istek dışarıdan gelen bir **adrese** gidiyordu. 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
sunmak istediği kök dizine ekler ve sonucu okur. Dizin geçişi bu zincirdir.

Bu dersin ölçüsü öncekilerden bir noktada ayrılır. Geç kırmanın bedeli burada bir işlem ya da
oturum sayısı değil, **okunabilir kalem sayısıdır** — ve o sayı zincirin nerede kırıldığına
değil, kırılmadığında sürecin gördüğü envanterin büyüklüğüne bağlıdır. Bu yüzden ölçümün
merkezinde bir kurgu dosya envanteri durur. Hiçbir yol dizgesi üretilmez; kalemler yalnız
konum ve izin özellikleriyle tanımlanır.

## Zincirin Beş Adımı

1. **Ad istekten gelir.** Önkoşul: uç, sunulacak kalemin adını istek alanından alıyor.
2. **Ad yola birleştirilir.** Önkoşul: ad bir tanıtıcıya eşlenmiyor, doğrudan yolun bir
   bileşeni olarak kullanılıyor.
3. **Birleştirilen yol kökün dışına düşer.** Önkoşul: yol normalleştirildikten sonra kökün
   altında kalıp kalmadığına bakan bir denetim yok.
4. **Süreç kimliği o kalemi okuyabilir.** Önkoşul: sürecin çalıştığı kimliğin dosya izinleri o
   kalemi kapsıyor.
5. **İçerik yanıta yazılır.** Önkoşul: yanıt gövdesi kalemin içeriğini olduğu gibi taşıyor.

Üçüncü adım bu sınıfın adını taşıyan adımdır, ama tek başına bir şey vermez. Kökün dışına
düşen bir yol, dördüncü adım tutmadıkça bir okuma üretmez. **Sınıfın bedelini belirleyen şey
üçüncü adım değil, dördüncü adımın kapsadığı envanterdir.**

İkinci adım da kendi başına bir karardır ve çoğu tartışmada atlanır. Bir uç, sunacağı kalemi
istekten gelen adla değil, önceden belirlenmiş bir tanıtıcı kümesinden seçerek de
belirleyebilir. O zaman istekten gelen değer bir yol bileşeni olmaz; bir anahtar olur ve
anahtar kümenin dışındaysa istek karşılıksız kalır. Bu karar zincirin en erken kırılabilen
noktasıdır ve envanteri kökten değil, **listeden** tanımlar.

**TS18:** adım dizisi bir modeldir. **TS19:** her katman tek bir adımı kırar; bölme hiçbir adımı
kırmaz, yalnız envanteri daraltır. **TS20:** envanter 30 kurgu kalemdir ve her kalem konum, izin
ve duyarlılık ağırlığıyla tanımlanır. **TS21:** erişilebilir küme, dağıtılan katmanların
envanteri daralttığı sonuçtur.

```js
// dg/envanter.mjs — kurgu bir dosya envanteri ve dizin gecisi zinciri (model).
// Gercek bir dosya sistemi, gercek bir yol ve hicbir gecis dizgesi yok; kalemler yalnizca
// konum ve izin ozellikleriyle tanimlanir.
export const ADIM = ["ad-istekten", "yola-birlestirme", "kok-disina-cikma",
  "surecin-okumasi", "yanita-yazma"];

export const KATMAN = [
  { ad: "tanitici-eslemesi", kirar: 2, mesru: 6 },
  { ad: "kok-denetimi",      kirar: 3, mesru: 1 },
  { ad: "dar-surec-kimligi", kirar: 4, mesru: 4 },
  { ad: "cikti-siniri",      kirar: 5, mesru: 3 },
  { ad: "bolme",             kirar: 0, mesru: 9 },
];

// kok = uygulamanin sunmak istedigi kok altinda mi, bolme = surecin bolmesi icinde mi,
// sahip = kalemin sahibi, ortak = herkese okunur mu, duyar = kurgu duyarlilik agirligi.
const K = (ad, kok, bolme, sahip, ortak, duyar) => ({ ad, kok, bolme, sahip, ortak, duyar });
export const KALEM = [
  K("fatura/2026-01.belge", 1, 1, "uygulama", 0, 1), K("fatura/2026-02.belge", 1, 1, "uygulama", 0, 1),
  K("fatura/2026-03.belge", 1, 1, "uygulama", 0, 1), K("rapor/donem-ozeti.belge", 1, 1, "uygulama", 0, 1),
  K("rapor/sayac-dokum.belge", 1, 1, "uygulama", 0, 1), K("sablon/bildirim.metin", 1, 1, "uygulama", 0, 0),
  K("sablon/fatura.metin", 1, 1, "uygulama", 0, 0), K("saha/foto-1.imge", 1, 1, "uygulama", 0, 0),
  K("saha/foto-2.imge", 1, 1, "uygulama", 0, 0), K("saha/foto-3.imge", 1, 1, "uygulama", 0, 0),
  K("indirme/dokum.arsiv", 1, 1, "uygulama", 0, 1), K("indirme/gecmis.arsiv", 1, 1, "uygulama", 0, 1),
  K("uygulama/ayar.yapilandirma", 0, 1, "uygulama", 0, 3),
  K("uygulama/veritabani.baglanti", 0, 1, "uygulama", 0, 3),
  K("uygulama/imza.anahtar", 0, 1, "uygulama", 0, 3),
  K("uygulama/gunluk/erisim.kayit", 0, 1, "uygulama", 0, 2),
  K("uygulama/gunluk/hata.kayit", 0, 1, "uygulama", 0, 2),
  K("uygulama/surum.metin", 0, 1, "uygulama", 1, 0),
  K("ortak/zaman-dilimi.tablo", 0, 1, "sistem", 1, 0),
  K("ortak/kod-sayfasi.tablo", 0, 1, "sistem", 1, 0),
  K("sistem/kullanici-listesi.kayit", 0, 0, "sistem", 1, 2),
  K("sistem/agirlik-tablosu.kayit", 0, 0, "sistem", 1, 1),
  K("sistem/ag-ayari.yapilandirma", 0, 0, "sistem", 1, 2),
  K("sistem/servis-tanimi.birim", 0, 0, "sistem", 1, 1),
  K("sistem/gizli/kimlik.deposu", 0, 0, "sistem", 0, 3),
  K("sistem/gizli/anahtar.deposu", 0, 0, "sistem", 0, 3),
  K("komsu/toplayici-ayar.yapilandirma", 0, 0, "komsu", 0, 3),
  K("komsu/dogrulayici-ayar.yapilandirma", 0, 0, "komsu", 0, 3),
  K("komsu/fatura-sablonu.metin", 0, 0, "komsu", 0, 1),
  K("komsu/gunluk-arsiv.kayit", 0, 0, "komsu", 0, 2),
];

// Tanitici eslemesi: uc, ad yerine sabit bir tanitici kumesinden secim yapar.
export const ESLEME = KALEM.filter((k) => k.kok && !k.ad.startsWith("indirme/"));

export const UC = [
  ["abone-portali.fatura-indir", ["tanitici-eslemesi", "kok-denetimi", "dar-surec-kimligi"]],
  ["abone-portali.rapor-goster", ["kok-denetimi", "dar-surec-kimligi", "cikti-siniri"]],
  ["saha-uygulamasi.foto-getir", ["kok-denetimi", "bolme"]],
  ["fatura-uretimi.sablon-oku", ["tanitici-eslemesi"]],
  ["rapor.dokum-indir", ["dar-surec-kimligi"]],
  ["yonetim.kayit-goruntule", []],
];

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
// dg/olcum.mjs — erisilebilir kalem sayimi: her katman kumesi icin envanterin ne kadari
// okunabilir kaliyor. Rastgelelik yok; hicbir yol dizgesi uretilmez.
import { ADIM, KATMAN, KALEM, ESLEME, UC, yaz } from "./envanter.mjs";

function erisilebilir(d) {
  if (d.includes("tanitici-eslemesi")) return ESLEME;             // 2. adim kirildi
  let k = d.includes("bolme") ? KALEM.filter((x) => x.bolme) : KALEM;
  if (d.includes("kok-denetimi")) k = k.filter((x) => x.kok);      // 3. adim kirildi
  if (d.includes("dar-surec-kimligi"))                             // 4. adim kirildi
    k = k.filter((x) => x.sahip === "uygulama" || x.ortak);
  return k;
}
const duyar = (k) => k.reduce((t, x) => t + x.duyar, 0);
const ilkKirilan = (d) => Math.min(...KATMAN
  .filter((x) => d.includes(x.ad) && x.kirar > 0).map((x) => x.kirar), Infinity);

console.log(`${ADIM.length} adimlik zincir, ${KATMAN.length} katman, ` +
  `${KALEM.length} kalemlik kurgu envanter (kok alti ${KALEM.filter((k) => k.kok).length}, ` +
  `bolme ici ${KALEM.filter((k) => k.bolme).length}, toplam duyarlilik ${duyar(KALEM)})\n`);

const A = [-20, 9, 10, 12];
console.log("1. katman-adim eslemesi");
yaz(A, "katman", "kirdigi", "mesru", "dagitim");
for (const k of KATMAN)
  yaz(A, k.ad, k.kirar ? `${k.kirar}. adim` : "yok", k.mesru,
    UC.filter(([, d]) => d.includes(k.ad)).length);

const B = [-42, 8, 12, 13];
console.log("\n2. sekiz kurulus (tanitici eslemesi disinda)");
yaz(B, "kurulus", "kalem", "duyarlilik", "ilk kirilan");
const UCLU = ["kok-denetimi", "dar-surec-kimligi", "bolme"];
for (let m = 0; m < 8; m++) {
  const d = UCLU.filter((_, i) => m & (1 << i));
  const k = erisilebilir(d);
  const h = ilkKirilan(d);
  yaz(B, d.length ? d.join(" + ") : "hicbiri", k.length, duyar(k),
    h === Infinity ? "kirilmiyor" : `${h}. adim`);
}
const es = erisilebilir(["tanitici-eslemesi"]);
console.log(`tanitici eslemesi tek basina: ${es.length} kalem, duyarlilik ${duyar(es)}, ` +
  `2. adimda kirar; mesru bedeli her yeni kalemin eslemeye eklenmesidir`);

const C = [-30, 8, 13, 9, 12, 10];
console.log("\n3. uc basina zincir");
yaz(C, "uc", "katman", "ilk kirilan", "kalem", "duyarlilik", "kok disi");
for (const [ad, d] of UC) {
  const k = erisilebilir(d), h = ilkKirilan(d);
  yaz(C, ad, d.length, h === Infinity ? "kirilmiyor" : `${h}. adim`, k.length, duyar(k),
    k.filter((x) => !x.kok).length);
}
const acik = UC.filter(([, d]) => ilkKirilan(d) === Infinity);
console.log(`hicbir halkasi kirilmayan uc: ${acik.length}; bu uclarda okunabilir kalem ` +
  `${erisilebilir([]).length}, duyarlilik ${duyar(erisilebilir([]))}`);

const D = [-20, 12, 14, 14];
console.log("\n4. bolmenin ayri yeri");
yaz(D, "kurulus", "kirdigi adim", "kalem", "duyarlilik");
for (const [ad, d] of [["hicbiri", []], ["yalniz bolme", ["bolme"]],
  ["yalniz kok-denetimi", ["kok-denetimi"]], ["bolme + kok-denetimi", ["bolme", "kok-denetimi"]]]) {
  const k = erisilebilir(d), h = ilkKirilan(d);
  yaz(D, ad, h === Infinity ? "yok" : `${h}. adim`, k.length, duyar(k));
}
console.log(`bolme hicbir adimi kirmaz ama envanteri ${KALEM.length} kalemden ` +
  `${KALEM.filter((k) => k.bolme).length} kaleme, duyarliligi ${duyar(KALEM)}'den ` +
  `${duyar(KALEM.filter((k) => k.bolme))}'e indirir`);
```

```
5 adimlik zincir, 5 katman, 30 kalemlik kurgu envanter (kok alti 12, bolme ici 20, toplam duyarlilik 41)

1. katman-adim eslemesi
katman                kirdigi     mesru     dagitim
tanitici-eslemesi     2. adim         6           2
kok-denetimi          3. adim         1           3
dar-surec-kimligi     4. adim         4           3
cikti-siniri          5. adim         3           1
bolme                     yok         9           1

2. sekiz kurulus (tanitici eslemesi disinda)
kurulus                                      kalem  duyarlilik  ilk kirilan
hicbiri                                         30          41   kirilmiyor
kok-denetimi                                    12           7      3. adim
dar-surec-kimligi                               24          26      4. adim
kok-denetimi + dar-surec-kimligi                12           7      3. adim
bolme                                           20          20   kirilmiyor
kok-denetimi + bolme                            12           7      3. adim
dar-surec-kimligi + bolme                       20          20      4. adim
kok-denetimi + dar-surec-kimligi + bolme        12           7      3. adim
tanitici eslemesi tek basina: 10 kalem, duyarlilik 5, 2. adimda kirar; mesru bedeli her yeni kalemin eslemeye eklenmesidir

3. uc basina zincir
uc                              katman  ilk kirilan    kalem  duyarlilik  kok disi
abone-portali.fatura-indir           3      2. adim       10           5         0
abone-portali.rapor-goster           3      3. adim       12           7         0
saha-uygulamasi.foto-getir           2      3. adim       12           7         0
fatura-uretimi.sablon-oku            1      2. adim       10           5         0
rapor.dokum-indir                    1      4. adim       24          26        12
yonetim.kayit-goruntule              0   kirilmiyor       30          41        18
hicbir halkasi kirilmayan uc: 1; bu uclarda okunabilir kalem 30, duyarlilik 41

4. bolmenin ayri yeri
kurulus             kirdigi adim         kalem    duyarlilik
hicbiri                      yok            30            41
yalniz bolme                 yok            20            20
yalniz kok-denetimi      3. adim            12             7
bolme + kok-denetimi     3. adim            12             7
bolme hicbir adimi kirmaz ama envanteri 30 kalemden 20 kaleme, duyarliligi 41'den 20'e indirir
```

## Envanterin Daralması

İkinci çıktı üç katmanın bütün bileşimlerini dener. Hiçbir katman yokken 30 kalemin tamamı
okunabilir ve toplam duyarlılık 41'dir; kök denetimi tek başına bunu **12 kaleme ve 7
duyarlılığa** indirir. Kalem sayısı %60 azalırken duyarlılık %83 azalır: kökün dışındaki 18
kalem, envanterin duyarlılığının orantısızca büyük bölümünü taşır.

Dar süreç kimliği tek başına 24 kalem ve 26 duyarlılık bırakır. Kök denetiminden belirgin
biçimde zayıftır, çünkü yalnız **sahipliğe** bakar: uygulamanın kendi kalemleri ve herkese
okunur sistem kalemleri elenmez. Uygulamanın kendi yapılandırma, bağlantı ve anahtar
kalemleri kök dışındadır ve süreç kimliği daralsa bile okunur kalır.

Duyarlılık sütununun kalem sütunundan hızlı düşmesi bu ölçümün en kullanışlı yanıdır. Kalem
saymak envanterin **büyüklüğünü** verir, duyarlılık toplamı ise **ne kaybedildiğini**. Bir
savunma kararı yalnız kalem sayısıyla değerlendirilirse, otuz kalemden yirmisini kapatan bir
katman iyi görünür; duyarlılık sütunu o yirmi kalemin toplam ağırlığın ne kadarını taşıdığını
söyler ve iki sütun aynı yönde hareket etmeyebilir.

Bileşimler ikinci bir şey söyler: kök denetimi bulunduğu her satırda sonucu **12/7'ye sabitler**.
Ona eklenen hiçbir katman sayıyı değiştirmez. Kırılabilen en erken halka sonucu belirlediğinde,
sonraki katmanların envanter üzerindeki katkısı sıfırdır — bu, dördüncü ve beşinci katmanların
gereksiz olduğu anlamına gelmez, kök denetiminin bir uçtan kalkması hâlinde devreye
gireceklerini gösterir.

Tanıtıcı eşlemesi zinciri daha erken kırar: **ikinci adımda**, ad hiç yola çevrilmeden. Geriye
10 kalem ve 5 duyarlılık kalır — kök denetiminden de dar bir küme, çünkü kök altındaki iki
arşiv kalemi eşlemede yer almaz. Bedeli ise başka türdendir: her yeni kalem eşlemeye elle
eklenmelidir; meşru işe bedeli 6 ile kök denetiminin altı katıdır.

## Bölmenin Ayrı Yeri

Dördüncü çıktı bu dersin ayrımını yapar. Bölme **hiçbir adımı kırmaz**: ad yine istekten
gelir, yine yola birleştirilir, yine kökün dışına düşer, yine okunur ve yine yanıta yazılır.
Zincirin beş adımı da tamamlanır.

Yaptığı şey ölçünün öteki tarafındadır: envanteri 30 kalemden 20'ye, duyarlılığı 41'den 20'ye
indirir. Bir savunma sütununda "kırılan halka" satırı boş kalır, "geç kırmanın bedeli" satırı
yarıya iner. **Zinciri kırmayan bir katman ölçüm dışı değildir; bedeli azaltan katmandır.**

Bu ayrım bu kursun üç sütununun neden ayrı tutulduğunu gösterir. Kırılabilen halka sütunu ile
geç kırmanın bedeli sütunu bağımsız değişebilir: bir katman birincisini iyileştirmeden
ikincisini yarıya indirebilir, bir başkası birincisini iyileştirip ikincisine hiç
dokunmayabilir. Tek sütunla yapılan bir değerlendirme bu iki katmandan birini her zaman
görmez.

Bölme ile dar süreç kimliğinin birlikte kullanıldığı satır ikinci bir bulgu verir: ikisi
birlikte, bölme tek başınayla **aynı sonucu** üretir. Bölmenin içindeki 20 kalemin tamamı zaten
uygulamanın kendi kalemleri ya da herkese okunur kalemlerdir; dar kimlik orada hiçbir kalemi
çıkarmaz. İki katman aynı kümeyi daralttığında ikincisinin katkısı sayıya yansımaz.

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

Üçüncü çıktı altı ucu ölçer. Dört uçta zincir ikinci ya da üçüncü adımda kırılıyor ve
okunabilir kümede kök dışı kalem sayısı **sıfırdır**. Bir uçta zincir dördüncü adımda
kırılıyor ve geriye 24 kalem kalıyor; bunların 12'si kök dışıdır. Bir uçta hiçbir halka
kırılmıyor: 30 kalem, 41 duyarlılık, 18 kök dışı kalem.

İki uç arasındaki fark tek bir katmandır. `rapor.dokum-indir` yalnız dar süreç kimliğini
taşıyor; kök denetimi eklenseydi okunabilir kalem 24'ten 12'ye, duyarlılık 26'dan 7'ye inerdi
ve bunun meşru işe bedeli **1** olurdu. Aynı ölçümde meşru bedeli 9 olan bölme, duyarlılığı
26'dan yalnız 20'ye indirirdi.

Bu karşılaştırma bu dersin pratik sonucudur: en ucuz katman en erken kıran katmandır ve bu
sınıfta o katman kök denetimidir. Bölme ve dar kimlik onun yerine geçmez; onun bir uçta
unutulduğu durumda kalan bedeli sınırlar.

Çıktı sınırının yeri de aynı tabloda okunur. Beşinci adımı kıran bu katman altı uçtan yalnız
birinde dağıtılmış ve bulunduğu uçta zincir zaten üçüncü adımda kırılıyor; yani bu koşumda
hiçbir sayıyı değiştirmiyor. Değeri, kendisinden önceki üç katmanın hepsinin aynı anda
eksik olduğu bir uçta ortaya çıkar — ve tabloda öyle bir uç vardır, ama orada çıktı sınırı da
yoktur. **Katmanların dağıtımı birbirini tamamlayacak biçimde değil, birbirini tekrarlayacak
biçimde yapılmış**; ölçüm bunu tek bakışta göstermez, ancak katman kümeleri uç uç
karşılaştırıldığında görünür.

## Özet

- Dizin geçişi beş adımlık bir zincirdir ve sınıfın adını taşıyan üçüncü adım tek başına bir
  okuma üretmez; bedeli belirleyen şey dördüncü adımın kapsadığı envanterdir.
- 30 kalemlik kurgu envanterde kök denetimi tek başına okunabilir kalemi 12'ye, duyarlılığı
  7'ye indirir; kalem sayısı %60, duyarlılık %83 azalır.
- Dar süreç kimliği 24 kalem ve 26 duyarlılık bırakır; uygulamanın kök dışındaki kendi
  yapılandırma ve anahtar kalemleri sahiplik ölçütüyle elenmez.
- Tanıtıcı eşlemesi zinciri en erken noktada — ikinci adımda — kırar ve 10 kalem bırakır, ama
  meşru işe bedeli 6 ile kök denetiminin altı katıdır.
- Bölme hiçbir adımı kırmaz; envanteri 30'dan 20 kaleme, duyarlılığı 41'den 20'ye indirir.
  Dar süreç kimliğiyle birlikte kullanıldığında ikinci katman hiçbir kalem çıkarmaz.
- Altı uçtan 1'inde hiçbir halka kırılmıyor (30 kalem, 41 duyarlılık); bir uçta tek bir
  katmanın eklenmesi duyarlılığı 26'dan 7'ye indirirdi ve meşru işe bedeli 1 olurdu.

## Sonraki Adım

Buraya kadarki dört sınıfın ortak noktası, değerin bir **yorumlayıcıya** verilmesiydi: bir
sorgu ayrıştırıcısına, bir sayfa çözümleyicisine, bir adres çözücüye, bir yol birleştiricisine.
Beşincisinde yorumlayıcı yoktur. Bir değer bellekte, kendisi için ayrılmış alandan büyük olduğu
için komşu alana taşar ve komşu alandaki kalem başka bir şey olur. Sonraki ders bu sınıfı
mantık düzeyinde ölçer: sınırlı bir dizi modelinde taşmanın hangi komşu alanı bozduğu, sınır
denetiminin kaç durumu yakaladığı, hangi dil sınıfının bu adımı ortadan kaldırdığı ve hangi
derleyici ile işletim sistemi denetiminin hangi adımı kırdığı sayılır.
