---
title: 'Veri Akış Diyagramları'
source: 'https://academia.sh/tr/kurslar/guvenli-yasam-dongusu/veri-akis-diyagramlari'
course: 'Güvenli Geliştirme Yaşam Döngüsü'
language: tr
updated: '2026-08-17T18:06:43+00:00'
license: 'CC BY-SA 4.0'
---

# Veri Akış Diyagramları

Konunun temel ölçümü: 17 düğüm, 26 akış ve altı güven bölgesinden oluşan çizgede 23 akışın güven sınırını geçmesi, bu geçişlerin akış başına 2,52 olmak üzere toplam 58 kalem doğurması, kalemlerin %58,6'sının düşükten yükseğe geçen akışlardan gelmesi, kaba bir dış/iç çiziminin 23 geçişin yalnız 7'sini ve 58 kalemin yalnız 15'ini görmesi ve görünmez kalan 16 geçişin 43 kalem taşıması.

Önceki ders oturumun fiyatını ve kapsama tavanını yazdı, ama oturumun içinde ne yapıldığını bir
kutu olarak bıraktı. Tasarım metnini okumak bir yöntem değildir: yüzlerce cümlenin hangisinin
güvenlik kalemi doğurduğu belli değildir ve iki kişi aynı metinden iki ayrı liste çıkarır.

Yöntemin ilk adımı tasarımı **üzerinde sayım yapılabilir** bir yapıya çevirmektir. O yapı **veri
akış çizgesidir (data flow diagram)**: hangi bileşen hangi veriyi kimden alıp kime veriyor. Bu
ders çizgeyi kurar ve konunun temel ölçümünü yapar — **güven sınırını geçen akış sayısı**, her
geçişin doğurduğu kalem ve sınır çizilmediğinde kaç akışın görünmez kaldığı.

## Çizge, Diyagram Değildir

Bir diyagram çizimdir; üzerinde sayım yapılan şey çizim değil, çizimin arkasındaki çizgedir.
Mimari Karar ve Dokümantasyon kursundaki ayrımla söylenirse diyagram bir **görünümdür**, çizge ise
görünümün türetildiği yapıdır. Aynı çizge kutu-ok çizimi olarak da, aşağıdaki gibi satır satır da
yazılabilir; ölçüm ikisinde de aynı sayıyı verir.

Aşağıdaki çizge bir **modeldir**: gerçek bir sistem, gerçek bir ana makine adı ya da gerçek bir
hizmet ucu yoktur. Kurgu bölgesel ölçüm ağının yazılımı ele alınır.

**TD5:** her düğüm bir **güven bölgesine** yerleşir ve bölgenin sayısal bir güven düzeyi vardır.
**TD6:** düğüm üç türden biridir — dış varlık, süreç, veri deposu. **TD7:** her akış bir veri
sınıfı taşır. **TD8:** iki ucunun bölgesi farklı olan akış **güven sınırını (trust boundary)**
geçer; sınırı geçen her akış aşağıdaki dört kuralla kalem doğurur, sınırı geçmeyen akış hiçbir
kalem doğurmaz.

```js
// tehdit/cizge.mjs — kurgu bolgesel olcum agi yaziliminin veri akis cizgesi (model):
// gercek bir sistem, gercek bir ana makine adi ya da gercek bir hizmet ucu yoktur.
// Cizge yalnizca "kim kimden ne aliyor" der; hicbir saldiri adimi tasimaz.

// TD5: her dugum bir guven bolgesine yerlesir ve bolgenin bir guven duzeyi vardir.
export const BOLGE = { internet: 0, saha: 1, "dis-uc": 2, ic: 3, yonetim: 4, veri: 5 };

// TD6: dugum "ad tur bolge" biciminde yazilir; tur dis varlik (D), surec (S) ya da depo (P).
export const DUGUM = Object.fromEntries(`
  abone D internet | denetim-kurumu D internet | sayac-cihazi D saha | saha-ekibi D saha
  abone-portali S dis-uc | toplama-ucu S dis-uc | saha-uygulamasi S saha
  dogrulayici S ic | faturalama S ic | is-emri S ic | rapor-ureteci S ic | kimlik-servisi S ic
  yonetim-konsolu S yonetim | olcum-deposu P veri | fatura-deposu P veri
  kimlik-deposu P veri | denetim-gunlugu P veri`
  .trim().split(/\s*[|\n]\s*/).map((r) => {
    const [ad, tur, bolge] = r.trim().split(/\s+/);
    return [ad, { ad, tur, bolge, duzey: BOLGE[bolge] }];
  }));

// TD7: akis "kaynak hedef sinif" biciminde yazilir; sinif tasinan veri sinifidir.
export const AKIS = `
  abone            abone-portali    kimlik      | abone-portali   kimlik-servisi  kimlik
  kimlik-servisi   kimlik-deposu    kimlik      | abone-portali   faturalama      fatura
  faturalama       fatura-deposu    fatura      | faturalama      abone-portali   fatura
  sayac-cihazi     toplama-ucu      olcum       | toplama-ucu     dogrulayici     olcum
  dogrulayici      olcum-deposu     olcum       | dogrulayici     faturalama      olcum
  saha-ekibi       saha-uygulamasi  kimlik      | saha-uygulamasi is-emri         emir
  is-emri          saha-uygulamasi  emir        | is-emri         olcum-deposu    olcum
  saha-uygulamasi  toplama-ucu      olcum       | yonetim-konsolu dogrulayici     ayar
  yonetim-konsolu  toplama-ucu      ayar        | yonetim-konsolu kimlik-servisi  ayar
  rapor-ureteci    olcum-deposu     olcum       | rapor-ureteci   fatura-deposu   fatura
  denetim-kurumu   rapor-ureteci    kimlik      | rapor-ureteci   denetim-kurumu  fatura
  faturalama       denetim-gunlugu  kayit       | kimlik-servisi  denetim-gunlugu kayit
  is-emri          denetim-gunlugu  kayit       | faturalama      is-emri         emir`
  .trim().split(/\s*[|\n]\s*/).map((r) => {
    const [kaynak, hedef, sinif] = r.trim().split(/\s+/);
    return { kaynak, hedef, sinif, ad: `${kaynak}->${hedef}` };
  });

// TD8: bir akis, iki ucunun bolgesi farkliysa guven sinirini gecer. Sinir gecen her akis
// asagidaki dort kuralla kalem dogurur; sinir gecmeyen akis hicbir kalem dogurmaz.
export function kalemler(a, bolgeAl = (d) => DUGUM[d].bolge, duzeyAl = (d) => DUGUM[d].duzey) {
  if (bolgeAl(a.kaynak) === bolgeAl(a.hedef)) return [];
  const k = [];
  if (duzeyAl(a.kaynak) < duzeyAl(a.hedef)) k.push("girdi-dogrulama", "kaynak-kimligi");
  if (duzeyAl(a.kaynak) > duzeyAl(a.hedef)) k.push("cikti-suzme");
  if (a.sinif === "kimlik" || a.sinif === "fatura") k.push("aktarim-korumasi");
  if (DUGUM[a.hedef].tur === "P") k.push("yetkilendirme");
  return k;
}
```

```js
// tehdit/sinir.mjs — guven sinirini gecen akis sayisi, her gecisin tasidigi kalem ve
// sinir cozunurlugu dustugunde kac akisin gorunmez kaldigi.
import { BOLGE, DUGUM, AKIS, kalemler } from "./cizge.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const gecen = AKIS.filter((a) => DUGUM[a.kaynak].bolge !== DUGUM[a.hedef].bolge);

console.log(`${Object.keys(DUGUM).length} dugum, ${AKIS.length} akis, ` +
  `${Object.keys(BOLGE).length} guven bolgesi; sinir gecen akis ${gecen.length}, ` +
  `sinir gecmeyen ${AKIS.length - gecen.length}`);

const A = [-12, 8, 12, 8, 7, 12, 13];
console.log("\n1. bolgeler ve icerdikleri");
yaz(A, "bolge", "duzey", "dis varlik", "surec", "depo", "cikan akis", "sinir gecen");
for (const [b, d] of Object.entries(BOLGE)) {
  const ds = Object.values(DUGUM).filter((x) => x.bolge === b);
  const cikan = AKIS.filter((a) => DUGUM[a.kaynak].bolge === b);
  yaz(A, b, d, ds.filter((x) => x.tur === "D").length, ds.filter((x) => x.tur === "S").length,
    ds.filter((x) => x.tur === "P").length, cikan.length,
    cikan.filter((a) => DUGUM[a.hedef].bolge !== b).length);
}

const B = [-33, -9, -9, -50];
console.log("\n2. sinir gecen her akis ve dogurdugu kalem");
yaz(B, "akis", "sinif", "duzey", "dogan kalem");
for (const a of gecen)
  yaz(B, a.ad, a.sinif, `${DUGUM[a.kaynak].duzey}->${DUGUM[a.hedef].duzey}`,
    kalemler(a).join(" "));
const TUM = gecen.flatMap((a) => kalemler(a));
console.log(`sinir gecen ${gecen.length} akis toplam ${TUM.length} kalem doguruyor, ` +
  `akis basina ${(TUM.length / gecen.length).toFixed(2)}`);

const C = [-20, 10, 12, 12];
console.log("\n3. kalem turune gore");
yaz(C, "kalem turu", "sayi", "kalem %", "akis %");
for (const t of [...new Set(TUM)].sort()) {
  const n = TUM.filter((x) => x === t).length;
  yaz(C, t, n, ((n / TUM.length) * 100).toFixed(1), ((n / AKIS.length) * 100).toFixed(1));
}

// Cozunurluk: ayni cizge uc ayri sinir cizimiyle olculur. Kaba cizim yalnizca dis/ic
// ayrimini tanir; sinirsiz cizim butun dugumleri tek bolgede sayar.
const KABA = { internet: "dis", saha: "dis", "dis-uc": "ic", ic: "ic", yonetim: "ic",
  veri: "ic" };
const cizim = {
  "sinir cizilmemis": { b: () => "tek", d: () => 0 },
  "kaba: dis/ic": { b: (x) => KABA[DUGUM[x].bolge],
    d: (x) => (KABA[DUGUM[x].bolge] === "dis" ? 0 : 1) },
  "ayrintili: 6 bolge": { b: (x) => DUGUM[x].bolge, d: (x) => DUGUM[x].duzey },
};
const D = [-20, 12, 12, 13, 12];
console.log("\n4. sinir cozunurlugu dustugunde ne gorunmez kaliyor");
yaz(D, "cizim", "gorulen akis", "gorulen %", "dogan kalem", "kalem %");
const tam = { akis: gecen.length, kalem: TUM.length };
for (const [ad, c] of Object.entries(cizim)) {
  const g = AKIS.filter((a) => c.b(a.kaynak) !== c.b(a.hedef));
  const k = g.flatMap((a) => kalemler(a, c.b, c.d));
  yaz(D, ad, g.length, ((g.length / tam.akis) * 100).toFixed(1), k.length,
    ((k.length / tam.kalem) * 100).toFixed(1));
}
const kaba = cizim["kaba: dis/ic"];
const kabaG = AKIS.filter((a) => kaba.b(a.kaynak) !== kaba.b(a.hedef));
const kacan = gecen.filter((a) => !kabaG.includes(a));
console.log(`kaba cizimde gorunmeyen ${kacan.length} sinir gecisi ` +
  `${kacan.flatMap((a) => kalemler(a)).length} kalem tasiyor; bunlarin ` +
  `${kacan.filter((a) => DUGUM[a.hedef].tur === "P").length} tanesi bir veri deposuna giriyor`);
```

```
17 dugum, 26 akis, 6 guven bolgesi; sinir gecen akis 23, sinir gecmeyen 3

1. bolgeler ve icerdikleri
bolge          duzey  dis varlik   surec   depo  cikan akis  sinir gecen
internet           0           2       0      0           2            2
saha               1           2       1      0           4            3
dis-uc             2           0       2      0           3            3
ic                 3           0       5      0          14           12
yonetim            4           0       1      0           3            3
veri               5           0       0      4           0            0

2. sinir gecen her akis ve dogurdugu kalem
akis                             sinif    duzey    dogan kalem
abone->abone-portali             kimlik   0->2     girdi-dogrulama kaynak-kimligi aktarim-korumasi
abone-portali->kimlik-servisi    kimlik   2->3     girdi-dogrulama kaynak-kimligi aktarim-korumasi
kimlik-servisi->kimlik-deposu    kimlik   3->5     girdi-dogrulama kaynak-kimligi aktarim-korumasi yetkilendirme
abone-portali->faturalama        fatura   2->3     girdi-dogrulama kaynak-kimligi aktarim-korumasi
faturalama->fatura-deposu        fatura   3->5     girdi-dogrulama kaynak-kimligi aktarim-korumasi yetkilendirme
faturalama->abone-portali        fatura   3->2     cikti-suzme aktarim-korumasi
sayac-cihazi->toplama-ucu        olcum    1->2     girdi-dogrulama kaynak-kimligi
toplama-ucu->dogrulayici         olcum    2->3     girdi-dogrulama kaynak-kimligi
dogrulayici->olcum-deposu        olcum    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
saha-uygulamasi->is-emri         emir     1->3     girdi-dogrulama kaynak-kimligi
is-emri->saha-uygulamasi         emir     3->1     cikti-suzme
is-emri->olcum-deposu            olcum    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
saha-uygulamasi->toplama-ucu     olcum    1->2     girdi-dogrulama kaynak-kimligi
yonetim-konsolu->dogrulayici     ayar     4->3     cikti-suzme
yonetim-konsolu->toplama-ucu     ayar     4->2     cikti-suzme
yonetim-konsolu->kimlik-servisi  ayar     4->3     cikti-suzme
rapor-ureteci->olcum-deposu      olcum    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
rapor-ureteci->fatura-deposu     fatura   3->5     girdi-dogrulama kaynak-kimligi aktarim-korumasi yetkilendirme
denetim-kurumu->rapor-ureteci    kimlik   0->3     girdi-dogrulama kaynak-kimligi aktarim-korumasi
rapor-ureteci->denetim-kurumu    fatura   3->0     cikti-suzme aktarim-korumasi
faturalama->denetim-gunlugu      kayit    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
kimlik-servisi->denetim-gunlugu  kayit    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
is-emri->denetim-gunlugu         kayit    3->5     girdi-dogrulama kaynak-kimligi yetkilendirme
sinir gecen 23 akis toplam 58 kalem doguruyor, akis basina 2.52

3. kalem turune gore
kalem turu                sayi     kalem %      akis %
aktarim-korumasi             9        15.5        34.6
cikti-suzme                  6        10.3        23.1
girdi-dogrulama             17        29.3        65.4
kaynak-kimligi              17        29.3        65.4
yetkilendirme                9        15.5        34.6

4. sinir cozunurlugu dustugunde ne gorunmez kaliyor
cizim               gorulen akis   gorulen %  dogan kalem     kalem %
sinir cizilmemis               0         0.0            0         0.0
kaba: dis/ic                   7        30.4           15        25.9
ayrintili: 6 bolge            23       100.0           58       100.0
kaba cizimde gorunmeyen 16 sinir gecisi 43 kalem tasiyor; bunlarin 9 tanesi bir veri deposuna giriyor
```

Sayılar **ölçüm** sınıfındadır; girdileri TD5–TD8'dir.

## Yirmi Üç Geçiş

On yedi düğüm, yirmi altı akış, altı güven bölgesi. Bu üç sayıdan hiçbiri tehdit modellemenin
girdisi değildir; girdi olan sayı **23'tür** — güven sınırını geçen akış sayısı. Yirmi altı akışın
yalnız üçü aynı bölge içinde kalır: saha ekibinin kendi uygulamasıyla konuşması, doğrulayıcının
faturalamaya ölçüm vermesi ve faturalamanın iş emri üretmesi.

Bu oran çizgenin biçiminden gelir. Bölgeler yalıtımı artırmak için konur, ama iş akışı bölgeleri
dolaşmak zorundadır: abonenin isteği internet bölgesinden başlar ve veri bölgesinde biter, yani
tek bir işlemde üç ayrı sınır geçilir. Birinci tablonun son sütunu bunu bölge bölge yazar. `ic`
bölgesinden çıkan on dört akışın **on ikisi** bölgeyi terk eder; `veri` bölgesinden hiçbir akış
çıkmaz, çünkü depolar yalnız yazılan ve okunan uçlardır.

Güvenlik açısından tek başına anlamlı olan sayı budur. Saldırı Yüzeyi dersinde yüzey bir yol
sayısıyla ölçülmüştü; tasarım aşamasında elde henüz yol yoktur, yalnız akış vardır. Bu aşamada
yüzeyin sayılabilir karşılığı **güven sınırını geçen akış sayısıdır** ve o sayı sınırların nereye
çizildiğine bağlıdır.

## Geçişin Doğurduğu Kalem

İkinci tablo her sınır geçişini kalem listesine çevirir. Yirmi üç geçiş **58 kalem** doğurur;
geçiş başına 2,52. Kural kümesi dört maddedir ve hiçbiri sezgiye dayanmaz: güven düzeyi düşükten
yükseğe geçen akış girdi doğrulama ve kaynak kimliği ister, tersi yönde giden akış çıktı süzme
ister, kimlik ya da fatura sınıfı veri taşıyan akış aktarım koruması ister, bir veri deposuna
giren akış yetkilendirme ister.

Üçüncü tablo dağılımı verir. `girdi-dogrulama` ve `kaynak-kimligi` on yedişer kalemle ilk
sıradadır; ikisi birlikte 58 kalemin **%58,6'sını** taşır. İkisinin de tek kaynağı vardır: yirmi
üç geçişin on yedisi düşük güven düzeyinden yükseğe gider. `cikti-suzme` altı kalemle en küçük
gruptur, `aktarim-korumasi` ve `yetkilendirme` dokuzar kalemle ortadadır.

En kalabalık satırlar dört kalem birden doğurur: `kimlik-servisi->kimlik-deposu`,
`faturalama->fatura-deposu` ve `rapor-ureteci->fatura-deposu`. Üçü de düşükten yükseğe gider,
korunması gereken bir veri sınıfı taşır ve bir depoya yazar. En yalın satır ise
`is-emri->saha-uygulamasi`: tek kalem, `cikti-suzme`. Kalem sayısı akışın önemiyle değil,
**kaç kuralı birden tetiklediğiyle** belirlenir; bu ayrım yöntemin sistematik olmasını sağlayan
şeydir.

Aynı sistematiklik kuralın kör noktasını da üretir. Yönetim konsolu beşinci güven düzeyinden
sonraki en yüksek düzeydedir ve çıkan üç akışının üçü de aşağı yönlüdür; bu yüzden üçünde de
yalnız `cikti-suzme` doğar, hiçbirinde `girdi-dogrulama` doğmaz. Kural kümesi açısından bu
tutarlıdır — daha güvenilir bir kaynaktan gelen veri doğrulanmaz — ama üç akışın taşıdığı şey
`ayar` sınıfıdır ve doğrulayıcının ayarını değiştirmek ölçüm zincirinin tamamını etkiler.
**Güven düzeyi bir sıralamadır, bir bağışıklık belgesi değildir.** Sistematik üretimin ürettiği
kalem kümesi, güven düzeyi atamalarının doğruluğunun ötesine geçemez; atama yanlışsa yöntem sessiz
kalır ve bu sessizlik hiçbir tabloda bir sıfır olarak görünmez.

## Sınır Çizilmediğinde

Dördüncü tablo bu dersin en dikkat çekici sonucudur. Aynı yirmi altı akış üç ayrı çizim
çözünürlüğüyle ölçülür ve sonuç üç ayrı sayı verir.

Sınır hiç çizilmemişse bütün düğümler tek bölgede sayılır: **sıfır geçiş, sıfır kalem**. Sistem
değişmemiştir, yalnız ölçüsü yok edilmiştir. Bu, tehdit modelleme oturumunun sıfır kalemle
bitmesinin en yaygın sebebidir — çizge çizilmiştir ama üzerine sınır konmamıştır.

Kaba çizim — yalnız dış ve iç ayrımı — **7 geçiş** görür, yani gerçek geçişlerin %30,4'ünü, ve 15
kalem doğurur, yani %25,9'unu. Ayrıntılı çizim 23 geçiş ve 58 kalem verir. Aradaki fark
**16 geçiş ve 43 kalemdir**; bu kalemlerin dokuzu bir veri deposuna giren akışlardan gelir.

Kaybın nerede olduğu açıktır. Kaba çizim iç ağı tek bir güvenli kutu sayar, dolayısıyla
`dogrulayici->olcum-deposu`, `faturalama->fatura-deposu` ya da `yonetim-konsolu->kimlik-servisi`
gibi akışlar hiç sınır geçmemiş olur. Bunlar sistemin en yüksek değerli akışlarıdır: kimlik ve
fatura verisinin depolara yazıldığı yerdir. **Sınır çözünürlüğü düştükçe kaybolan kalemler
rastgele seçilmez; iç bölgede kalanlar kaybolur ve iç bölgede duran şey deponun kendisidir.**

Buradan çıkan kural sadedir: bir tehdit modelleme oturumunun ilk çıktısı tehdit listesi değil,
**bölge listesidir**. Bölge sayısı ile bulunabilecek kalem sayısı aynı yönde hareket eder ve
bölgeler yanlış çizildiğinde sonraki bütün adımlar eksik bir küme üzerinde koşar.

## Özet

- Tasarım aşamasında yüzeyin sayılabilir karşılığı **güven sınırını geçen akış sayısıdır**:
  17 düğüm ve 26 akışlık çizgede 23 akış sınır geçer, yalnız 3'ü aynı bölge içinde kalır.
- Sınır geçen 23 akış dört kuralla **58 kalem** doğurur; geçiş başına 2,52. Kalem sayısı akışın
  önemine değil, akışın kaç kuralı birden tetiklediğine bağlıdır.
- Kalemlerin %58,6'sı düşük güven düzeyinden yükseğe giden 17 akıştan gelir; çıktı süzme yalnız
  6 kalemle en küçük gruptur.
- Sınır hiç çizilmediğinde ölçüm **sıfır geçiş, sıfır kalem** verir; sistem değişmemiş, yalnız
  ölçüsü yok edilmiştir.
- Kaba bir dış/iç çizimi 23 geçişin 7'sini ve 58 kalemin 15'ini görür; görünmez kalan 16 geçiş
  43 kalem taşır ve bunların 9'u bir veri deposuna giren akıştır.

## Sonraki Adım

Bu ders sayılabilir bir yüzey üretti: 23 geçiş ve 58 kalem. Ama 58 kalem bir tehdit listesi
değildir — kalemler denetim türleridir, yani "burada bir kimlik doğrulaması gerekir" der, "burada
şu şey olabilir" demez. İkisi arasındaki fark yöntemin ikinci adımıdır.

Bir çizge öğesine bakıp "burada ne ters gidebilir" sorusunu sormak kişiye ve o günkü dikkate
bağlıdır. Bunu kişiden bağımsız hale getiren şey, öğe türü başına **sabit bir kategori listesi**
uygulamaktır: her akışa, her sürece ve her depoya aynı soruların sorulması. Sonraki ders bu
sistematik üretimi koşturur ve iki sayıyı ayırır: yöntem kaç tehdit üretiyor ve bunların kaçı bu
sistem için gerçekten geçerli. Üretim ucuzdur; **eleme** pahalıdır ve dakikası ölçülür.
