---
title: 'Web Uygulaması Riskleri'
source: 'https://academia.sh/tr/kurslar/saldiri-teknikleri/web-uygulamasi-riskleri'
course: 'Saldırı Teknikleri ve Tehdit Ortamı'
language: tr
updated: '2026-08-17T18:08:33+00:00'
license: 'CC BY-SA 4.0'
---

# Web Uygulaması Riskleri

Yaygın risk listelerinin sıralama değil okuma biçimi olduğunun ölçülmesi: on kurgu kalemde genel sıralama ile kurum sıralaması arasında altı kalemin yer değiştirmesi, en büyük kaymanın dört sıra olması, dokuz zincirdeki otuz dokuz adımın yirmi ikisinin denetimsiz kalması, bir zincirin çalışma zamanında hiç kırılamaması ve savunmanın kırma sırasının kurum sırasıyla üç kalemde yalnız birinde örtüşmesi.

Önceki konu insan katmanını ölçtü: bahaneden iletiye, iletiden alan adına kadar zincirin ilk
halkaları bir kişinin verdiği karara dayanıyordu ve o karar kaç halkayı kırdığı sayılarak
ölçüldü. Bir kez içeri girildikten sonra ise zincir başka bir yerden devam eder — yazılımın
kendisinin açtığı halkalardan. Bu konu o halkaları sayar.

Sayıma başlamadan önce bir okuma sorunu var. Uygulama katmanındaki riskler için hazırlanmış
yaygın listeler vardır ve bu listeler çoğu kurumda bir yapılacaklar sırası gibi okunur. Bu
ders o okuma biçimini ölçer: liste neye göre sıralanıyor, sıralama bir kurumda neden
değişiyor ve listenin hiçbir kaleminin taşımadığı üçüncü bir sıra neden gerekiyor. Bu
dersteki ve bu konudaki hiçbir teknik, **yazılı yetki ve tanımlı kapsam** dışında bir sistem
üzerinde denenemez; denenmesi hem yasadışı hem meslek dışıdır.

## Listenin Yapısı

Yaygın risk listeleri kalemlerini dört ölçütle sıralar: kalemin sahada **ne sıklıkta**
görüldüğü, bir saldırganın onu **ne kadar kolay** kullanabildiği, savunanın onu **ne kadar
kolay bulduğu** ve başarılı olduğunda ortaya çıkan **teknik etki**. Dördü de kaleme aittir;
hiçbiri kuruma ait değildir.

Dört ölçütten biri ters yönde çalışır. Savunanın kalemi kolay bulması riski **düşürür**,
çünkü kolay bulunan kalem düzeltilme şansı yüksek olan kalemdir. Bu, listenin sırasına
doğrudan giren ve en çok yanlış okunan ölçüttür: bir kalemin listede aşağıda olması onun
seyrek görüldüğü anlamına gelmez, çoğu kurumda **zaten bulunmuş** olduğu anlamına gelir.
Kendi envanterini çıkarmamış bir kurum için bu bilgi hiçbir şey ifade etmez.

Beşinci bir ölçüt kasten dışarıda bırakılır: **iş etkisi**. Bir kalemin bir kurumda ne
kaybettirdiği, o kurumun neyi sakladığına, hangi işi durdurulamaz saydığına ve mimarisinde o
kalemin karşılığının bulunup bulunmadığına bağlıdır. Liste bunu bilemez, bu yüzden hesaba
katmaz. Listenin sırası bu nedenle bir öneri değil, **bir başlangıç noktasıdır**.

**TS1:** aşağıdaki kalem kümesi bir **modeldir** — gerçek bir risk listesi, gerçek bir kurum
ve gerçek bir ölçüm değildir; ölçüt değerleri kurgudur. **TS2:** her kalem bir adım dizisidir;
`denetimli`, üzerinde bir denetim noktası bulunan adımların indeksidir. **TS3:** genel sıralama
dört ölçütün ortalamasıdır. **TS4:** kurum sıralaması aynı ölçütleri kullanır, teknik etkiyi
kendi ağırlıklarıyla toplar ve mimarisinde karşılığı olmayan kalemi maruziyetle ölçekler.
**TS5:** kırılabilen halka, üzerinde denetim noktası bulunan en küçük indeksli adımdır.

```js
// risk/kalem.mjs — kurgu risk kalemi kumesi (model): gercek bir risk listesi, gercek bir
// kurum ya da gercek bir olcum yok. Dort olcut 0..10 arasinda kurgu degerlerdir.
// yay: yayginlik, ist: istismar edilebilirlik, tes: savunanin tespit kolayligi,
// etk: teknik etki bileseni {g: gizlilik, b: butunluk, e: erisilebilirlik}
export const KALEM = [
  { ad: "erisim-denetimi",  yay: 9, ist: 7, tes: 4, etk: { g: 9, b: 8, e: 3 }, maruz: 1.0 },
  { ad: "enjeksiyon",       yay: 6, ist: 8, tes: 6, etk: { g: 9, b: 9, e: 5 }, maruz: 0.8 },
  { ad: "kimlik-yonetimi",  yay: 7, ist: 6, tes: 5, etk: { g: 8, b: 6, e: 4 }, maruz: 1.0 },
  { ad: "yapilandirma",     yay: 8, ist: 5, tes: 8, etk: { g: 6, b: 5, e: 6 }, maruz: 1.0 },
  { ad: "bakimsiz-bilesen", yay: 8, ist: 4, tes: 9, etk: { g: 7, b: 7, e: 6 }, maruz: 1.0 },
  { ad: "sifreleme-karari", yay: 5, ist: 3, tes: 3, etk: { g: 9, b: 4, e: 1 }, maruz: 0.3 },
  { ad: "kayit-eksikligi",  yay: 7, ist: 2, tes: 2, etk: { g: 3, b: 3, e: 2 }, maruz: 1.0 },
  { ad: "sunucu-istegi",    yay: 3, ist: 5, tes: 5, etk: { g: 7, b: 4, e: 3 }, maruz: 0.2 },
  { ad: "tasarim-kusuru",   yay: 5, ist: 6, tes: 2, etk: { g: 6, b: 8, e: 5 }, maruz: 0.9 },
  { ad: "butunluk-dogrulama", yay: 4, ist: 4, tes: 4, etk: { g: 4, b: 9, e: 4 }, maruz: 1.0 },
];

// TS2: her kalem bir adim dizisidir. adim = zincirin adim sayisi;
// denetimli = uzerinde bir denetim noktasi bulunan adim indeksleri (1 tabanli);
// bedel = zincir son adimda kirilirsa etkilenen kurgu kalem sayisi.
export const ZINCIR = {
  "erisim-denetimi":   { adim: 4, denetimli: [2, 4],       bedel: 240 },
  "enjeksiyon":        { adim: 6, denetimli: [2, 3, 5],    bedel: 480 },
  "kimlik-yonetimi":   { adim: 5, denetimli: [1, 3, 4],    bedel: 180 },
  "yapilandirma":      { adim: 3, denetimli: [1, 2, 3],    bedel: 120 },
  "bakimsiz-bilesen":  { adim: 5, denetimli: [1, 2],       bedel: 300 },
  "sifreleme-karari":  { adim: 4, denetimli: [4],          bedel: 360 },
  "kayit-eksikligi":   { adim: 0, denetimli: [],           bedel: 0 },
  "sunucu-istegi":     { adim: 5, denetimli: [3, 4],       bedel: 90 },
  "tasarim-kusuru":    { adim: 4, denetimli: [],           bedel: 200 },
  "butunluk-dogrulama": { adim: 3, denetimli: [2],         bedel: 150 },
};

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
// risk/sirala.mjs — ayni kalem kumesi uc ayri sirada: genel liste, kurum siralamasi,
// savunmanin kirma sirasi. Rastgelelik yok; her sayi kurgu olcut degerlerinden turetilir.
import { KALEM, ZINCIR, yaz } from "./kalem.mjs";

const genel = (k) => (k.yay + k.ist + (10 - k.tes) + (k.etk.g + k.etk.b + k.etk.e) / 3) / 4;

// Kurgu olcum agi icin butunluk ve erisilebilirlik agir, gizlilik daha hafiftir.
const W = { g: 0.1, b: 0.5, e: 0.4 };
const kurum = (k) => k.maruz * (k.yay + k.ist +
  (10 - k.tes) + (k.etk.g * W.g + k.etk.b * W.b + k.etk.e * W.e)) / 4;

const sirala = (f) => [...KALEM].sort((a, b) => f(b) - f(a)).map((k) => k.ad);
const G = sirala(genel), K = sirala(kurum);
const A = [-20, 8, 6, 8, 6, 8];

console.log(`${KALEM.length} kurgu risk kalemi, ayni dort olcut, iki agirlik kumesi\n`);
yaz(A, "kalem", "genel", "sira", "kurum", "sira", "kayma");
for (const ad of G) {
  const k = KALEM.find((x) => x.ad === ad);
  const g = G.indexOf(ad) + 1, u = K.indexOf(ad) + 1;
  yaz(A, ad, genel(k).toFixed(2), g, kurum(k).toFixed(2), u,
    u === g ? "-" : (u < g ? "+" : "") + (g - u));
}
console.log(`\nsira degistiren kalem: ${G.filter((ad, i) => K.indexOf(ad) !== i).length}` +
  `/${KALEM.length}; en buyuk kayma: ` +
  `${Math.max(...G.map((ad, i) => Math.abs(K.indexOf(ad) - i)))} sira; ilk ucluden ortak: ` +
  `${G.slice(0, 3).filter((ad) => K.slice(0, 3).includes(ad)).length}/3`);

const B = [-20, 7, 11, 14, 11];
console.log(`\nzincir sutunlari (kurum sirasina gore)`);
yaz(B, "kalem", "adim", "denetimli", "ilk kirilan", "gec bedel");
const zincirli = K.filter((ad) => ZINCIR[ad].adim > 0);
for (const ad of K) {
  const z = ZINCIR[ad];
  if (z.adim === 0) { yaz(B, ad, "-", "-", "zincir degil", "-"); continue; }
  yaz(B, ad, z.adim, z.denetimli.length,
    z.denetimli.length ? `${z.denetimli[0]}. adim` : "kirilamiyor", z.bedel);
}
const topla = (f) => zincirli.reduce((s, ad) => s + f(ZINCIR[ad]), 0);
console.log(`\n${zincirli.length} zincirde toplam ${topla((z) => z.adim)} adim, ` +
  `${topla((z) => z.denetimli.length)} adimda denetim var, ` +
  `${topla((z) => z.adim - z.denetimli.length)} adim denetimsiz`);
const ilk = (ad) => ZINCIR[ad].denetimli[0] ?? 0;
console.log(`ilk adimda kirilan: ${zincirli.filter((a) => ilk(a) === 1).length}; ` +
  `ucuncu adim ve sonrasi: ${zincirli.filter((a) => ilk(a) >= 3).length}; ` +
  `hic kirilamayan: ${zincirli.filter((a) => ilk(a) === 0).length}`);

// Savunmanin sirasi: once erken kirilabilen, esitlikte bedeli buyuk olan.
const kirma = zincirli.filter((a) => ilk(a) > 0)
  .sort((a, b) => ilk(a) - ilk(b) || ZINCIR[b].bedel - ZINCIR[a].bedel);
console.log(`\nkurum sirasinin ilk ucu : ${K.slice(0, 3).join(", ")}`);
console.log(`kirma sirasinin ilk ucu : ${kirma.slice(0, 3).join(", ")}`);
console.log(`ortak kalem: ${K.slice(0, 3).filter((a) => kirma.slice(0, 3).includes(a)).length}/3`);
```

```
10 kurgu risk kalemi, ayni dort olcut, iki agirlik kumesi

kalem                  genel  sira   kurum  sira   kayma
erisim-denetimi         7.17     1    7.03     1       -
enjeksiyon              6.42     2    5.08     6      -4
tasarim-kusuru          6.33     3    5.76     3       -
kimlik-yonetimi         6.00     4    5.85     2      +2
yapilandirma            5.17     5    5.13     4      +1
bakimsiz-bilesen        4.92     6    4.90     7      -1
sifreleme-karari        4.92     7    1.37     9      -2
kayit-eksikligi         4.92     8    4.90     8       -
butunluk-dogrulama      4.92     9    5.13     5      +4
sunucu-istegi           4.42    10    0.84    10       -

sira degistiren kalem: 6/10; en buyuk kayma: 4 sira; ilk ucluden ortak: 2/3

zincir sutunlari (kurum sirasina gore)
kalem                  adim  denetimli   ilk kirilan  gec bedel
erisim-denetimi           4          2       2. adim        240
kimlik-yonetimi           5          3       1. adim        180
tasarim-kusuru            4          0   kirilamiyor        200
yapilandirma              3          3       1. adim        120
butunluk-dogrulama        3          1       2. adim        150
enjeksiyon                6          3       2. adim        480
bakimsiz-bilesen          5          2       1. adim        300
kayit-eksikligi           -          -  zincir degil          -
sifreleme-karari          4          1       4. adim        360
sunucu-istegi             5          2       3. adim         90

9 zincirde toplam 39 adim, 17 adimda denetim var, 22 adim denetimsiz
ilk adimda kirilan: 3; ucuncu adim ve sonrasi: 2; hic kirilamayan: 1

kurum sirasinin ilk ucu : erisim-denetimi, kimlik-yonetimi, tasarim-kusuru
kirma sirasinin ilk ucu : bakimsiz-bilesen, kimlik-yonetimi, yapilandirma
ortak kalem: 1/3
```

## Sıralama Kuruma Göre Değişir

İlk tablo aynı on kalemi iki kez sıralar. Ölçüt değerleri iki sıralamada da aynıdır;
değişen yalnız teknik etkinin nasıl toplandığı ve kalemin bu mimaride karşılığının olup
olmadığıdır. Sonuç: **on kalemden altısı yer değiştirdi** ve en büyük kayma dört sıradır.

İki uç örnek farkın nereden geldiğini gösterir. `enjeksiyon` genel sırada ikinciyken kurum
sırasında altıncıya düşer; kurgu ölçüm ağının uçlarının bir bölümünde bu kalemin karşılığı
yoktur ve maruziyet 0,8 ile ölçeklenir. `butunluk-dogrulama` ise dokuzuncudan beşinciye
çıkar: sayaç okumasının doğru olduğunun kanıtlanması bu ağın **asıl işidir** ve bütünlük
ağırlığı 0,5'tir. Genel listede bu kalem orta sıralardadır çünkü ortalama bir kurumda
bütünlük, gizlilik kadar ağır basmaz.

En büyük düşüş `sifreleme-karari` kalemindedir: 4,92'den 1,37'ye, yedinciden dokuzuncuya.
Bunun nedeni ağırlık değil **maruziyettir**; bu kurgu ağda ilgili yüzey dar tanımlanmıştır ve
skor 0,3 ile ölçeklenir. Maruziyet ağırlıktan daha sert bir çarpandır: ağırlık kalemi birkaç
sıra oynatır, maruziyet listeden düşürür.

Kaymaların yönü de bilgi taşır. Yukarı çıkan iki kalem — `kimlik-yonetimi` ve
`butunluk-dogrulama` — bu ağın kendi işine dokunan kalemlerdir; aşağı inen üç kalemin
ikisinde neden maruziyet, birinde ağırlıktır. Bir kurum kendi sıralamasını çıkardığında
ürettiği asıl çıktı sıranın kendisi değil, **kaymanın nedenidir**: bir kalem mimaride yoksa
onu izlemeye ayrılan emek boşa gider, ağırlık yüzünden inmişse kalem hâlâ oradadır ve yalnız
sırası değişmiştir.

İlk üçlüde iki kalem ortaktır. Bu, listenin işe yaramadığı anlamına gelmez; listenin
**hangi kalemlerin var olduğunu** doğru söylediği, **hangisinin önce geleceğini** söylemediği
anlamına gelir. Liste bir envanterdir; sıra kurumun kendi ölçümüdür.

## Zincir Sütunları

İkinci tablo her kalemi bu kursun üç sütunuyla anar. Dokuz zincirde toplam **39 adım**
vardır; bunların 17'sinde bir denetim noktası bulunur, **22 adım denetimsizdir**. Denetimsiz
adım sayısı yüzeyin değil, savunmanın ölçüsüdür: her denetimsiz adım, zincirin o noktadan
sorunsuz geçtiği bir yerdir.

Üç zincir ilk adımda kırılabiliyor. Bunlar en ucuz üç kalemdir: zincir başlamadan biter ve
geç kırma bedeli hiç ödenmez. Buna karşılık `sifreleme-karari` ancak **dördüncü adımda**
kırılabiliyor ve o noktaya kadar 360 kurgu kalem etkilenmiş oluyor. Aynı kalem kurum
sırasında dokuzuncudur — yani düşük öncelikli sayılan bir kalem, en pahalı geç kırma bedelini
taşıyor.

Tablonun iki satırı ölçünün sınırını gösterir. `tasarim-kusuru` dört adımlıktır ve
**hiçbir adımında denetim noktası yoktur**: bu zincir çalışma zamanında kırılamaz, çünkü
denetim noktası zincirin dışındadır — tasarım anındadır. Böyle bir kalemde ölçü kırmadan
**tespite** kayar: zincir tamamlanacaktır, sorulacak tek soru ne kadar geç görüleceğidir.

`kayit-eksikligi` satırı ise bir zincir bile değildir. Bu kalem bir saldırı adım dizisi
tanımlamaz; öteki zincirlerin **görülmemesini** tanımlar. Aynı listede iki farklı türden
kalem yan yana durur ve tek bir sıralama ikisini de aynı ölçekte gösterir. Listeyi bir
yapılacaklar sırası gibi okumanın en somut sorunu budur.

## Savunmanın Üçüncü Sırası

Son üç satır dersin sonucudur. Kurum sıralaması riski büyükten küçüğe verir; savunmanın
sırası ise **en erken kırılabilen halkaya** göredir. İki sıranın ilk üçlüsünde yalnız bir
ortak kalem vardır.

`bakimsiz-bilesen` kurum sırasında yedincidir ama kırma sırasında birincidir: zinciri birinci
adımda kırılıyor ve geç kırma bedeli 300 ile üçüncü en yüksek değer. Yani düşük öncelikli
görünen bir kalem, en ucuz ve en getirili ilk hamledir. Tersine `erisim-denetimi` her iki
sıralamada da birincidir ama zinciri ancak ikinci adımda kırılabiliyor; ilk hamle olmaya
listedeki yeri değil, halkasının yeri karar verir.

Buradan çıkan kural bu konunun geri kalanını yönetir: bir risk kalemini önceliklendirmek üç
ayrı sorunun cevabını gerektirir — kalem bu mimaride var mı, etkisi bu kurumda ne kadar ağır,
ve zinciri **kaçıncı adımda** kırılabiliyor. Liste yalnız birincinin envanterini verir.

Üçüncü sorunun cevabı listeden okunamaz, çünkü liste kalemleri tanımlarken adımlarını
yazmaz. Bu konunun geri kalan sekiz dersi tam da o eksik sütunu doldurur: her sınıfın adım
dizisi önkoşullarıyla yazılır, savunma katmanları o adımlarla eşlenir ve kırılabilen halka
bir indeks olarak çıkar.

## Özet

- Yaygın risk listeleri kalemleri yaygınlık, istismar edilebilirliği, tespit kolaylığı ve
  teknik etki ile sıralar; iş etkisini kasten dışarıda bırakır. Liste bir sıra önerisi değil,
  bir envanterdir.
- Aynı on kalem kurum ağırlıkları ve maruziyetle yeniden sıralandığında 6 kalem yer değiştirdi,
  en büyük kayma 4 sıra oldu ve ilk üçlüden yalnız 2 kalem ortak kaldı.
- Maruziyet ağırlıktan sert bir çarpandır: bir kalem 4,92'den 1,37'ye düşerek listenin altına
  indi; ağırlık değişimi kalemleri en çok dört sıra oynattı.
- Dokuz zincirde 39 adımın 17'sinde denetim noktası var, 22 adım denetimsiz. Üç zincir birinci
  adımda kırılıyor; bir zincir çalışma zamanında hiç kırılamıyor ve orada ölçü tespite kayıyor.
- Kurum sırasının ilk üçlüsü ile kırma sırasının ilk üçlüsü yalnız 1 kalemde örtüşüyor;
  yedinci sıradaki bir kalem birinci adımda kırıldığı için ilk hamle oluyor.

## Sonraki Adım

Bu ders kalemleri saydı ama hiçbirinin içini açmadı. On kalemin en yüksek geç kırma bedelini
taşıyan zinciri altı adımlıktı ve üç adımında denetim noktası vardı — hangi üçünde olduğu ve
o denetimlerin **hangi adımı** kestiği yazılmadı. Sonraki ders o zinciri açar: enjeksiyon
sınıfının altı adımı tek tek önkoşullarıyla yazılır, aynı girdi kümesi beş savunma katmanından
geçirilir ve her katmanın kırdığı adım sayılır. Ölçülecek şey girdinin kendisi değil, girdinin
hangi katmanda durduğu ve durmadığında zincirin kaçıncı adımına kadar ilerlediğidir.
