---
title: 'Sızıntı Müdahalesi'
source: 'https://academia.sh/tr/kurslar/calisma-zamani-guvenligi/sizinti-mudahalesi'
course: 'Çalışma Zamanı Güvenliği ve Sır Yönetimi'
language: tr
updated: '2026-08-17T18:06:42+00:00'
license: 'CC BY-SA 4.0'
---

# Sızıntı Müdahalesi

Sızıntı müdahalesi iptal akışı olarak koşturulur: kalan altı statik sırda sızıntı anından iptale kadar ortalama 1.386 dakika, en kötü kalemde 4.650 dakika geçiyor ve o sürede sırlardan 224.171 çağrı geçiyor. Sahiplik kaydı 340, önceden üretilmiş yedek 465 dakika kazandırıyor; sürekli depo taraması hiçbir şey kazandırmıyor çünkü altı sızıntının yalnız ikisi depoya düşüyor. Yayılmayı beklemeden iptal 150.934 çağrıyı kurtarıyor ama 68.503 meşru isteği kesiyor — kurtarılan her 2,2 çağrı için bir kesilen istek.

Konunun ilk dört dersi sırların sayısını, ömrünü ve değişme maliyetini ölçtü ve aynı soruyu
yanıtsız bıraktı: bir sır sızdığında ne oluyor. Açık pencere, sırrın **kendiliğinden**
geçersizleşme süresiydi; sızıntı fark edilip iptal edilirse pencere daha erken kapanır. Bu ders
o "daha erken"i ölçer.

Ölçülen şey iptal akışıdır ve akış savunma tarafındadır. Sızmış bir sırla ne yapılabileceği ya da
o sırrın nasıl bulunacağı yazılmıyor; yazılan tek şey, sızıntının fark edilmesinden eski değerin
geçersiz kılınmasına kadar geçen dakikalar ve o dakikalarda sırdan geçen çağrı hacmidir. Ölçüm,
önceki dersten kalan **altı statik sır** üzerinde koşuyor.

- **SR23.** Önceki dört dersin modeli sürüyor. Ortam **kurgudur**, ölçülen şey `node` ile
  yazılmış bir **modeldir** ve **gerçek sır değeri taşımaz**; model yalnız sır yollarını ve akış
  sürelerini tutar.
- **SR24.** Her sırrın sızıntı kanalı modelde seçilmiştir ve tespit yolunu belirler: kod
  deposuna düşen sızıntı sürekli taramayla, günlük dosyasına düşen kullanım anormalliğiyle,
  üçüncü taraftaki sağlayıcı bildirimiyle, istemci paketindeki dış ihbarla fark edilir.
- **SR25.** Akış beş aşamalıdır: fark etme, teyit ve etki değerlendirmesi, sahibini bulma, yeni
  değeri üretme, yeni değerin yayılması. Yayılma süresi bir önceki dersin asgari örtüşmesidir.
- **SR26.** "Sırdan geçen çağrı", o sırrın açık pencere boyunca yetkilendirdiği toplam çağrı
  hacmidir; pencerenin **ölçeğini** gösteren üst sınırdır, kötüye kullanılan hacim değildir.
- **SR27.** Rastgelelik yok; bütün sayılar model tablolarından türetiliyor ve çıktı koşumdan
  koşuma aynı.

## Fark Etmeden İptale Kaç Dakika

```js
// iptal.mjs — sizinti aninda iptale kadar gecen dakika ve o surede sirdan gecen cagri. MODELDIR.
// Ortam KURGUDUR; GERCEK SIR DEGERI YOKTUR, yalniz sir yollari ve akis sureleri modellenir.
// Sirrin nasil kullanilacagi yazilmaz; olculen sey savunma tarafindaki iptal akisidir.

// Onceki dersten kalan alti statik sir. kanal: sizintinin dustugu yer (modelde secilmis).
// sahip: sir kaydinda sahibi yazili mi. dis: yeni degeri dis saglayici uretiyor mu.
// cagri: sirrin yetkilendirdigi gunluk cagri. yayilma: onceki dersin asgari ortusmesi (dk).
export const SIR = {
  "altyapi/onbellek": { kanal: "depo", sahip: true, dis: false, cagri: 240000, yayilma: 60 },
  "imza/oturum-imzalama": { kanal: "gunluk", sahip: true, dis: false, cagri: 180000,
    yayilma: 960 },
  "imza/belge-imzalama": { kanal: "depo", sahip: true, dis: false, cagri: 6200, yayilma: 240 },
  "dis/odeme-gecidi": { kanal: "ucuncu-taraf", sahip: true, dis: true, cagri: 3400, yayilma: 240 },
  "dis/eposta-gecidi": { kanal: "istemci-paketi", sahip: false, dis: true, cagri: 13400,
    yayilma: 1440 },
  "dis/kisa-mesaj-gecidi": { kanal: "gunluk", sahip: false, dis: true, cagri: 8900,
    yayilma: 960 },
};
// tespit yolu kanala baglidir: yalniz kod deposuna dusen sizinti surekli taramayla yakalanir.
export const TESPIT = { depo: ["surekli tarama", 20], gunluk: ["kullanim anormalligi", 90],
  "ucuncu-taraf": ["saglayici bildirimi", 240], "istemci-paketi": ["dis ihbar", 2880] };
export const TEYIT = 30;                       // teyit ve etki degerlendirmesi (dk)
export const SAHIPLI = 10, SAHIPSIZ = 180;     // sahibini bulma (dk)
export const URETIM = 45, DISURETIM = 120;     // yeni deger uretme (dk)
export const AD = Object.keys(SIR);
export const asama = (s, o = {}) => {
  const k = SIR[s];
  return { tespit: o.tarama && k.kanal === "depo" ? 20 : TESPIT[k.kanal][1], teyit: TEYIT,
    sahip: k.sahip || o.kayit ? SAHIPLI : SAHIPSIZ,
    uretim: o.yedek ? 5 : k.dis ? DISURETIM : URETIM,
    yayilma: o.beklemez ? 0 : k.yayilma };
};
export const toplam = (s, o) => Object.values(asama(s, o)).reduce((t, x) => t + x, 0);
export const cagri = (s, o) => Math.round(SIR[s].cagri * toplam(s, o) / 1440);
export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0])).join("");

if (import.meta.url === `file://${process.argv[1]}`) {
  const yz = gen([18, 22, 8, 7, 8, 9, 9, 8]);
  console.log(`iptal akisi — ${AD.length} statik sir (kurgu uretim ortami); sureler dakika\n`);
  console.log(yz(["sir", "tespit yolu", "tespit", "teyit", "sahip", "uretim", "yayilma",
    "toplam"]));
  for (const s of AD) {
    const a = asama(s);
    console.log(yz([s.split("/")[1], TESPIT[SIR[s].kanal][0], a.tespit, a.teyit, a.sahip,
      a.uretim, a.yayilma, toplam(s)]));
  }
  const T = AD.reduce((t, s) => t + toplam(s), 0), C = AD.reduce((t, s) => t + cagri(s), 0);
  console.log(yz(["toplam", "", "", "", "", "", "", T]));

  console.log(`\n${gen([18, 12, 12, 14, 16])(["sir", "toplam dk", "= saat",
    "gunluk cagri", "iptale kadar"])}`);
  for (const s of [...AD].sort((x, y) => cagri(y) - cagri(x)))
    console.log(gen([18, 12, 12, 14, 16])([s.split("/")[1], toplam(s),
      (toplam(s) / 60).toFixed(1), SIR[s].cagri, cagri(s)]));
  console.log(gen([18, 12, 12, 14, 16])(["toplam", T, (T / 60).toFixed(1), "", C]));
  console.log(`\nsir basina ortalama ${Math.round(T / AD.length)} dk ` +
    `(${(T / AD.length / 60).toFixed(1)} saat); en uzun ${Math.max(...AD.map((s) => toplam(s)))} dk`);
  console.log(`ayni sizinti kisa omurlu bir kimlik bilgisinde olsaydi iptal akisi hic islemez, ` +
    `pencere 60 dk kalirdi: ${Math.round(Math.max(...AD.map((s) => toplam(s))) / 60)} kat`);
}
```

```
iptal akisi — 6 statik sir (kurgu uretim ortami); sureler dakika

sir                          tespit yolu  tespit  teyit   sahip   uretim  yayilma  toplam
onbellek                  surekli tarama      20     30      10       45       60     165
oturum-imzalama     kullanim anormalligi      90     30      10       45      960    1135
belge-imzalama            surekli tarama      20     30      10       45      240     345
odeme-gecidi         saglayici bildirimi     240     30      10      120      240     640
eposta-gecidi                  dis ihbar    2880     30     180      120     1440    4650
kisa-mesaj-gecidi   kullanim anormalligi      90     30     180      120      960    1380
toplam                                                                               8315

sir                  toplam dk      = saat  gunluk cagri    iptale kadar
oturum-imzalama           1135        18.9        180000          141875
eposta-gecidi             4650        77.5         13400           43271
onbellek                   165         2.8        240000           27500
kisa-mesaj-gecidi         1380        23.0          8900            8529
odeme-gecidi               640        10.7          3400            1511
belge-imzalama             345         5.8          6200            1485
toplam                    8315       138.6                        224171

sir basina ortalama 1386 dk (23.1 saat); en uzun 4650 dk
ayni sizinti kisa omurlu bir kimlik bilgisinde olsaydi iptal akisi hic islemez, pencere 60 dk kalirdi: 78 kat
```

Üst tablo akışın nerede geçtiğini gösteriyor. Sır başına ortalama bin üç yüz seksen altı dakika,
yani yirmi üç saat; ama satırlar arasında yüz altmış beş ile dört bin altı yüz elli dakika
arasında yirmi sekiz kat fark var.

Sütunlara bakıldığında farkın tamamı iki aşamadan geliyor. Teyit her satırda otuz dakika, sahibini
bulma on ya da yüz seksen, üretme kırk beş ya da yüz yirmi. Tespit sütunu ise yirmiden iki bin
sekiz yüz seksene çıkıyor — yüz kırk dört kat — ve yayılma sütunu altmıştan bin dört yüz kırka.
**Akışın süresini belirleyen şey müdahale ekibinin hızı değil, sızıntının nasıl fark edildiği ve
yeni değerin ne kadar yavaş yayıldığıdır.** İkisi de sızıntıdan önce belirlenmiştir.

Alt tablo aynı satırları çağrı hacmine çeviriyor ve sıralamayı bozuyor. Süre olarak en kötü kalem
e-posta geçidi anahtarıdır, dört bin altı yüz elli dakikayla; ama iptale kadar en çok çağrı oturum
imzalama anahtarından geçiyor: yüz kırk bir bin sekiz yüz yetmiş beş. O anahtar günde yüz seksen
bin çağrı yetkilendiriyor ve bin yüz otuz beş dakika bu hacimde uzun bir süredir. Ters uçta belge
imzalama anahtarı var: üç yüz kırk beş dakikada yalnız bin dört yüz seksen beş çağrı. Aynı akış,
aynı yordam — sonuç iki kalemde yüz kat farklı, çünkü arkalarındaki trafik farklı.

Son satır bu konunun ikinci dersine bağlanıyor. Aynı sızıntı kısa ömürlü bir kimlik bilgisinde
olsaydı bu akışın hiçbir adımı işlemezdi: fark edilmesi, sahibinin bulunması, yenisinin üretilmesi
gerekmezdi; jeton altmış dakikada kendiliğinden geçersiz olurdu. En kötü kalemle arasındaki fark
yetmiş sekiz kat. İptal akışı, ömrü kısaltılamayan sırlar için ödenen bedeldir.

## Hangi Aşamayı Kısaltmak Ne Kazandırıyor

```js
// hizlandirma.mjs — akisin hangi asamasini kisaltmak ne kazandiriyor, karsiliginda ne kesiyor
import { AD, SIR, TESPIT, asama, toplam, cagri, gen } from "./iptal.mjs";

// yeni degere gecmeyi bekleMEden iptal edilirse okuyucular gecis suresi boyunca kesilir.
// [uygulama, gecis(dk), gunluk istek] — onceki dersin gecis tablosundan.
const OKUR = {
  "altyapi/onbellek": [["portal-api", 60, 96000]],
  "imza/oturum-imzalama": [["portal-onyuz", 960, 84000], ["portal-api", 60, 96000]],
  "imza/belge-imzalama": [["fatura-servisi", 240, 6200]],
  "dis/odeme-gecidi": [["fatura-servisi", 240, 6200], ["odeme-koprusu", 0, 3400]],
  "dis/eposta-gecidi": [["abone-kayit", 960, 1400], ["bildirim", 15, 12000],
    ["rapor-uretici", 1440, 320]],
  "dis/kisa-mesaj-gecidi": [["abone-kayit", 960, 1400], ["bildirim", 15, 12000]],
};
const kesilen = (o) => o.beklemez ? Math.round(AD.reduce((t, s) => t + OKUR[s]
  .reduce((x, [, g, i]) => x + i * g / 1440, 0), 0)) : 0;

const AYAR = [["bugun", {}, "-"], ["+ sahiplik kaydi", { kayit: 1 }, "dagitim"],
  ["+ onceden uretilmis yedek", { kayit: 1, yedek: 1 }, "dagitim"],
  ["+ surekli depo taramasi", { kayit: 1, yedek: 1, tarama: 1 }, "yapi"],
  ["+ yayilmayi beklemeden iptal", { kayit: 1, yedek: 1, tarama: 1, beklemez: 1 },
    "calisma zamani"]];
const yz = gen([29, 11, 11, 15, 16]);
console.log(yz(["onlem", "toplam dk", "kazanc", "gecen cagri", "kesilen istek"]));
const T0 = AD.reduce((t, s) => t + toplam(s), 0);
for (const [ad, o] of AYAR) {
  const T = AD.reduce((t, s) => t + toplam(s, o), 0);
  console.log(yz([ad, T, T0 - T, AD.reduce((t, s) => t + cagri(s, o), 0), kesilen(o)]));
}
const son = AYAR[AYAR.length - 1][1], onceki = AYAR[AYAR.length - 2][1];
const dC = AD.reduce((t, s) => t + cagri(s, onceki) - cagri(s, son), 0);
console.log(`\nyayilmayi beklemeden iptal: ${dC} cagri kurtariyor, ${kesilen(son)} mesru istegi ` +
  `kesiyor (kurtarilan ${(dC / kesilen(son)).toFixed(1)} cagri basina 1 kesilen istek)`);
console.log(`surekli depo taramasinin kazanci 0: iki sirrin kanali zaten depo ve tespit 20 dk, ` +
  `diger dortunun sizintisi depoya hic dusmuyor`);

const yz2 = gen([18, 16, 9, 11, 27]);
console.log(`\n${yz2(["sir", "sizinti kanali", "tespit", "cagri", "daha erken kapatma"])}`);
const ERKEN = { depo: ["yapi", "hat sir taramasi"], gunluk: ["kod", "gunlukte maskeleme"],
  "istemci-paketi": ["yapi", "paket sir taramasi"], "ucuncu-taraf": ["yok", "-"] };
for (const s of AD)
  console.log(yz2([s.split("/")[1], SIR[s].kanal, asama(s).tespit, cagri(s),
    `${ERKEN[SIR[s].kanal][0]}: ${ERKEN[SIR[s].kanal][1]}`]));
const kapanir = AD.filter((s) => ERKEN[SIR[s].kanal][0] !== "yok");
console.log(`\nsizinti kanali daha erken kapatilabilen sir: ${kapanir.length} / ${AD.length}; ` +
  `bu kanallarin tespit gecikmesi toplam ` +
  `${kapanir.reduce((t, s) => t + asama(s).tespit, 0)} dk`);
const en = AD.reduce((x, s) => asama(s).tespit > asama(x).tespit ? s : x);
console.log(`tek kalemde en buyuk pay: ${en} — ${asama(en).tespit} dk tespit gecikmesi ve ` +
  `${Math.round(SIR[en].cagri * asama(en).tespit / 1440)} cagri, tamami yapi asamasindan geliyor`);
```

```
onlem                          toplam dk     kazanc    gecen cagri   kesilen istek
bugun                               8315          0         224171               0
+ sahiplik kaydi                    7975        340         221538               0
+ onceden uretilmis yedek           7510        805         207648               0
+ surekli depo taramasi             7510        805         207648               0
+ yayilmayi beklemeden iptal        3610       4705          56714           68503

yayilmayi beklemeden iptal: 150934 cagri kurtariyor, 68503 mesru istegi kesiyor (kurtarilan 2.2 cagri basina 1 kesilen istek)
surekli depo taramasinin kazanci 0: iki sirrin kanali zaten depo ve tespit 20 dk, diger dortunun sizintisi depoya hic dusmuyor

sir                 sizinti kanali   tespit      cagri         daha erken kapatma
onbellek                      depo       20      27500     yapi: hat sir taramasi
oturum-imzalama             gunluk       90     141875    kod: gunlukte maskeleme
belge-imzalama                depo       20       1485     yapi: hat sir taramasi
odeme-gecidi          ucuncu-taraf      240       1511                     yok: -
eposta-gecidi       istemci-paketi     2880      43271   yapi: paket sir taramasi
kisa-mesaj-gecidi           gunluk       90       8529    kod: gunlukte maskeleme

sizinti kanali daha erken kapatilabilen sir: 5 / 6; bu kanallarin tespit gecikmesi toplam 3100 dk
tek kalemde en buyuk pay: dis/eposta-gecidi — 2880 dk tespit gecikmesi ve 26800 cagri, tamami yapi asamasindan geliyor
```

İlk üç satır müdahale yordamına yazılan iki maddenin karşılığını veriyor. Her sır kaydına sahibini
yazmak üç yüz kırk dakika kazandırıyor; her sır için önceden bir yedek değer üretip hazır tutmak
dört yüz altmış beş dakika daha. İkisi birlikte sekiz bin üç yüz on beş dakikalık akışı yedi bin
beş yüz ona indiriyor — yüzde on. İkisi de ucuzdur ve sızıntı olmadan önce yazılır; ama toplam
kazanç akışın onda biridir.

Dördüncü satır bu kursun aradığı türden bir sonuçtur: **kazancı sıfır olan önlem.** Sürekli depo
taraması müdahale süresini bir dakika bile kısaltmıyor. Nedeni alt tabloda yazılı: altı sızıntının
yalnız ikisinin kanalı kod deposudur ve o ikisinde tespit zaten yirmi dakikadır. Diğer dördü depoya
hiç düşmüyor. Tarama gücünü artırmak, taramanın hiç bakmadığı yerlerdeki sızıntıyı görünür kılmaz;
bir savunmanın kapsadığı kalem kümesi sayılmadan yapılan her iyileştirme bu satırı üretir.

Beşinci satır asıl kararı içeriyor. Yeni değerin yayılmasını beklemeden eski değeri iptal etmek
akışı yedi bin beş yüz ondan üç bin altı yüz ona indiriyor ve geçen çağrıyı iki yüz yedi binden
elli altı bine düşürüyor — yüz elli bin dokuz yüz otuz dört çağrı kurtarılıyor. Karşılığında altmış
sekiz bin beş yüz üç meşru istek kesiliyor: kurtarılan her iki virgül iki çağrı için bir meşru
istek. Bu, sızıntı müdahalesinin gerçek kararıdır ve bir yordam maddesiyle çözülemez, çünkü doğru
cevap sırra göre değişir: ödeme geçidi anahtarında yayılmayı beklememek makul olabilir, oturum
imzalama anahtarında altmış bin isteği kesmek anlamına gelir.

Alt tablonun son sütunu kursun ekseni. Altı sızıntı kanalının beşi daha erken bir aşamada
kapatılabilir ve o beş kanalın tespit gecikmesi toplam üç bin yüz dakikadır. En büyük tek pay
e-posta geçidi anahtarındadır: saha uygulamasının istemci paketine gömülü olduğu için sızıntı
ancak dış ihbarla, iki gün sonra fark ediliyor ve o iki günde anahtardan yirmi altı bin sekiz yüz
çağrı geçiyor. Bu kalemin müdahale tarafında yapılacak hiçbir şeyi yoktur; anahtar paketin içine
yapı aşamasında girdi ve orada bir sır taramasıyla hiç girmemiş olurdu. Günlük dosyasına düşen iki
anahtar için de aynısı geçerli, bir aşama daha erken: günlük yazımında maskeleme bir kod kararıdır.

Geriye kalan tek kalem ödeme geçidi anahtarıdır. Sızıntı üçüncü tarafta oldu; ne yapı taraması ne
kod maskelemesi görürdü. Bu kalem için iptal akışı gerçekten tek yoldur — altı kalemden biri.

## Özet

- İptal akışı beş aşamadır: fark etme, teyit, sahibini bulma, yeni değeri üretme, yayılma. Kalan
  altı statik sırda toplam 8.315 dakika, sır başına ortalama 1.386 dakika (23,1 saat), en kötü
  kalemde 4.650 dakika.
- Süreyi belirleyen şey müdahale hızı değil, tespit ve yayılma sütunlarıdır: teyit her satırda 30
  dakika iken tespit 20 ile 2.880 arasında, yayılma 60 ile 1.440 arasında değişiyor.
- İptale kadar sırlardan 224.171 çağrı geçiyor ve sıralama süre sıralamasıyla aynı değil: en uzun
  akış e-posta geçidinde (4.650 dk) ama en çok çağrı oturum imzalamada (141.875).
- Sahiplik kaydı 340, önceden üretilmiş yedek 465 dakika kazandırıyor — toplamın yüzde onu. Sürekli
  depo taramasının kazancı sıfırdır: altı sızıntının yalnız ikisi depoya düşüyor ve o ikisinde
  tespit zaten 20 dakika.
- Yayılmayı beklemeden iptal 150.934 çağrıyı kurtarıyor ve 68.503 meşru isteği kesiyor: kurtarılan
  her 2,2 çağrı için bir kesilen istek. Doğru cevap sırra göre değişir, yordama yazılamaz.
- Altı sızıntı kanalının beşi daha erken bir aşamada kapanabilirdi (toplam 3.100 dakika tespit
  gecikmesi); en büyük tek pay istemci paketine gömülü anahtardır — 2.880 dakika ve 26.800 çağrı,
  tamamı yapı aşamasından.

## Sonraki Adım

Bu konu sırların ömrünü ölçtü ve kısalttı: erişim matrisi yetmiş dokuz kalemden otuz bire indi, on
altı kalemde açık pencere iki bin kat daraldı, yirmi kalem iş yükü kimliğiyle tamamen ortadan
kalktı ve kalan altı sır için iptal akışı dakika dakika yazıldı. Sırların artık bir sahibi, bir
ömrü, bir döndürme takvimi ve bir sızıntı yordamı var.

Bütün bunların altında bir varsayım duruyor ve o varsayıma hiç dokunulmadı. Bu konuda ölçülen her
şey bir servisin **kendini kanıtlamasıyla** ilgiliydi: doğru kimlik bilgisini taşıyan çağrı
geçiyor, taşımayan geçmiyor. Ama bir çağrı kimlik bilgisini taşıyorsa ne oluyor. Saha uygulama
arayüzü fatura servisini çağırdığında, fatura servisi o çağrının **fatura verisini okumaya yetkili
olup olmadığını** hiç sormuyor; çağrının bir yerden geldiğini görüyor ve karşılıyor. Sır doğru
yönetilse bile bu böyle kalırsa, tek bir servisin ele geçmesi ötekilere açılan bir kapıdır: dokuz
servisin arasındaki her güven ilişkisi, bir servisten diğerine geçilebilecek bir yoldur. Sonraki
konu o yolları sayar — kimlik doğrulaması olmayan servis çifti kaç, karşılıklı doğrulama bunların
kaçını kapatıyor ve kapanmayanlar hangi aşamada kapatılabilirdi.
