Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-01.01

Web uygulamasının aktörleri

Browser’ın gösterdiği sayfa, application’ın verdiği karar ve veri kaydı aynı şey değildir. Atlas Notları kitap ekranıyla aktörlerin işini ve sınırını ayır.

İlk geçişte neye bakmalısın?

Bir kitap açarken browser, application ve veri kaynağının hangi işi yaptığını izle. Önce bu üç rolü ayırman yeterli.

Kartlar sorumlulukları gösterir. Her kart ayrı bir bilgisayar olmak zorunda değildir. Request’i kimin aldığına ve ekranı kimin değiştirdiğine bak.

Client / server
İstek gönderen ve o isteğe yanıt veren roller.
Resource / representation
İstenen şey ile onun gönderilen gösterimi. Kitap kaydı ve JSON yanıtı aynı şey değildir.
Handler / store
Handler isteği işleyen kod; store bu örnekte kaydı tutan bellek alanı.
JSON / DOM
JSON veri gösterimidir. DOM browser’ın sayfayı temsil ettiği yapıdır; veriyi almak tek başına görünümü değiştirmez.
Sonraki ayrıntılar nerede açılacak?

Serialization, veriyi gönderilecek gösterime dönüştürmeyi anlatır. İlk geçişte kod ayrıntısını ezberleme; application’ın veriyi seçmesi ile browser’ın onu göstermesini ayır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

API representation

  1. Rolleri ve hedefi ayır

    Browser niyeti ve görünümü yönetir; application HTTP kararını üretir; üçüncü kart resource’ın bu örnekteki local veri kaynağını temsil eder. Ayrı kutular ayrı makine değildir.

    Browser · görünüm
    Seçim: /api/book?case=found
    Application · handler
    Request henüz yok
    Resource · local source
    Book kaydı + private not
  2. Request application’a ulaştı

    Browser’ın GET seçimi HTTP ile handler’a ulaştı. Browser response bekler; resource’ın bulunması veya body’nin sunulması henüz kararlaştırılmadı.

    Browser · görünüm
    Response bekliyor
    Application · handler
    GET /api/book?case=found alındı
    Resource · local source
    Book kaydı + private not
  3. Route yerel sorumluluğu seçer

    Bu branch kitap view’ını JSON biçiminde sunacak. URL, diskte aynı adlı bir dosya olmak zorunda değildir. API bir request/response sözleşmesidir.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Book API branch
    Resource · local source
    Book kaydı + private not
  4. Local source sonucu belirlendi

    Bu örneğin source erişimi aynı process içindeki local işlem olarak gösterilir. HTTP veya driver packet uydurulmaz. Resource kavramı tek başına storage türünü belirlemez.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Source sonucu hazır
    Resource · local source
    Book kaydı + private not
  5. Representation kaynakla aynı değildir

    Application yalnız public id/title alanlarını JSON representation’a koyar. Private not source’ta kalır; frontend’de gizlemek yerine body’ye hiç alınmamıştır.

    Browser · görünüm
    Response henüz gelmedi
    Application · handler
    JSON: id / title; private not yok
    Resource · local source
    Book kaydı + private not
  6. Representation browser’a ulaştı

    Model tamamlanmış response receipt’i gösterir. Browser status/body’yi öğrenir; kaynak kaydı ve server policy’si browser’a ait state’e dönüşmez.

    Browser · görünüm
    200 body alındı; DOM değişmedi
    Application · handler
    Response gönderildi
    Resource · local source
    Book kaydı + private not
  7. Görünüm ayrı bir işlemdir

    Frontend JSON’ı okuyup kitap adını DOM’a yazar. Source private notu bu public response’a dahil değildir. Representation, stored record ve DOM ayrı state’lerdir.

    Browser · görünüm
    UI: Atlas Notları
    Application · handler
    HTTP işlemi tamamlandı
    Resource · local source
    Book kaydı + private not

Statik document

  1. Rolleri ve hedefi ayır

    Browser niyeti ve görünümü yönetir; application HTTP kararını üretir; üçüncü kart resource’ın bu örnekteki local veri kaynağını temsil eder. Ayrı kutular ayrı makine değildir.

    Browser · görünüm
    Seçim: /about.html
    Application · handler
    Request henüz yok
    Resource · local source
    Hazır HTML document
  2. Request application’a ulaştı

    Browser’ın GET seçimi HTTP ile handler’a ulaştı. Browser response bekler; resource’ın bulunması veya body’nin sunulması henüz kararlaştırılmadı.

    Browser · görünüm
    Response bekliyor
    Application · handler
    GET /about.html alındı
    Resource · local source
    Hazır HTML document
  3. Route yerel sorumluluğu seçer

    Bu branch hazır bir document sunacak. Server olması database kullanmasını veya dinamik business handler çalıştırmasını zorunlu kılmaz.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Static document branch
    Resource · local source
    Hazır HTML document
  4. Local source sonucu belirlendi

    Bu örneğin source erişimi aynı process içindeki local işlem olarak gösterilir. HTTP veya driver packet uydurulmaz. Resource kavramı tek başına storage türünü belirlemez.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Source sonucu hazır
    Resource · local source
    Hazır HTML document
  5. Representation kaynakla aynı değildir

    Hazır document HTTP body olarak seçildi; status ve media type server sorumluluğundadır. Statik olması HTTP etkileşimini ortadan kaldırmaz.

    Browser · görünüm
    Response henüz gelmedi
    Application · handler
    HTML representation hazır
    Resource · local source
    Hazır HTML document
  6. Representation browser’a ulaştı

    Model tamamlanmış response receipt’i gösterir. Browser status/body’yi öğrenir; kaynak kaydı ve server policy’si browser’a ait state’e dönüşmez.

    Browser · görünüm
    200 body alındı; DOM değişmedi
    Application · handler
    Response gönderildi
    Resource · local source
    Hazır HTML document
  7. Görünüm ayrı bir işlemdir

    Browser document’i işler ve görünümü oluşturur. Network observation yalnız browser’a gelen representation’ı kanıtlar; server’ın bütün storage’ını göstermez.

    Browser · görünüm
    UI: document görünümü
    Application · handler
    HTTP işlemi tamamlandı
    Resource · local source
    Hazır HTML document

Resource bulunamadı

  1. Rolleri ve hedefi ayır

    Browser niyeti ve görünümü yönetir; application HTTP kararını üretir; üçüncü kart resource’ın bu örnekteki local veri kaynağını temsil eder. Ayrı kutular ayrı makine değildir.

    Browser · görünüm
    Seçim: /api/book?case=missing
    Application · handler
    Request henüz yok
    Resource · local source
    Seçili kitap yok
  2. Request application’a ulaştı

    Browser’ın GET seçimi HTTP ile handler’a ulaştı. Browser response bekler; resource’ın bulunması veya body’nin sunulması henüz kararlaştırılmadı.

    Browser · görünüm
    Response bekliyor
    Application · handler
    GET /api/book?case=missing alındı
    Resource · local source
    Seçili kitap yok
  3. Route yerel sorumluluğu seçer

    Bu branch kitap view’ını JSON biçiminde sunacak. URL, diskte aynı adlı bir dosya olmak zorunda değildir. API bir request/response sözleşmesidir.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Book API branch
    Resource · local source
    Seçili kitap yok
  4. Local source sonucu belirlendi

    Bu örneğin source erişimi aynı process içindeki local işlem olarak gösterilir. HTTP veya driver packet uydurulmaz. Resource kavramı tek başına storage türünü belirlemez.

    Browser · görünüm
    Response bekliyor
    Application · handler
    Source sonucu hazır
    Resource · local source
    Seçili kitap yok
  5. Representation kaynakla aynı değildir

    Kaynakta seçili kayıt yok. Application 404 ve açıklanabilir JSON seçer. Bu sonuç bir private alanın browser’a çıktığını göstermez.

    Browser · görünüm
    Response henüz gelmedi
    Application · handler
    404 + not-found JSON
    Resource · local source
    Seçili kitap yok
  6. Representation browser’a ulaştı

    Model tamamlanmış response receipt’i gösterir. Browser status/body’yi öğrenir; kaynak kaydı ve server policy’si browser’a ait state’e dönüşmez.

    Browser · görünüm
    404 body alındı; DOM değişmedi
    Application · handler
    Response gönderildi
    Resource · local source
    Seçili kitap yok
  7. Görünüm ayrı bir işlemdir

    Frontend bulunamadı state’ini gösterir. 404 bir application sonucudur; actor haritası bunu tek başına compromise diye sınıflamaz.

    Browser · görünüm
    UI: kitap bulunamadı
    Application · handler
    HTTP işlemi tamamlandı
    Resource · local source
    Seçili kitap yok

ROLLER · STATE · VERİ AKIŞI

Web neyi sağlar; Internet neyi taşır?

Internet birbirine bağlı ağların iletişim altyapısıdır. Web, URL’lerle tanımlanan kaynaklara HTTP üzerinden eriştiğimiz, belgeleri ve application etkileşimlerini bu altyapının üzerinde sunan sistemdir. E-posta da Internet’i kullanabilir; bir e-posta uygulamasının browser arayüzü Web olabilir ama mail taşıma protokolü HTTP olmak zorunda değildir. Web’i bütün Internet’in adı olarak kullanmak gözlemlediğin katmanı belirsizleştirir.

Web’in çalışması için public Internet zorunlu değildir. Aynı HTTP mekanizmasını private intranet’te veya 127.0.0.1 üzerinde kullanabiliriz. Atlas Notları adlı sentetik uygulamanın kitabını yerel browser’da açmak bu yüzden geçerli bir web etkileşimidir. Local olması protokolü kaldırmaz; yalnız ağ yolu ve güven varsayımlarının kapsamını değiştirir.

Client ve server birer roldür

Browser bir HTTP etkileşiminde request gönderen client’tır. Handler bu request’i alan server tarafında çalışır. Client ve server yalnız cihazların kalıcı etiketleri değildir: handler başka bir HTTP servisine request gönderirse o etkileşimde client rolündedir. Bir makinenin hem browser hem local server çalıştırması da mümkündür.

Atlas ekranındaki “Kitabı göster” düğmesi bir kullanıcı niyetidir. Frontend JavaScript bu niyeti bir request’e çevirir. Backend handler hangi veriyi sunacağını belirler. Storage adapter kitabın kaydını bulur. Browser elde ettiği veriyi DOM’a yansıtır. Düğme, handler ve storage aynı sorumluluk değildir; çizimde ayrı kutular olması mutlaka ayrı makine veya network bağlantısı olduğu anlamına gelmez.

Resource, kaydı kopyalamakla aynı şey değildir

Bir resource HTTP’nin hedefidir; bir dosya, kitap bilgisi veya hesaplanmış arama sonucu olabilir. URL onu tanımlar. Representation ise o resource’ın belirli bir anda belirli biçimde sunulan görünümüdür. Atlas kitabının JSON response’u ile HTML sayfası farklı representation tasarımları olabilir. Her URL disk üzerinde aynı isimli bir dosyaya karşılık gelmek zorunda değildir.

Kitap kaydında id, title ve price bulunabilir. API response’u yalnız id ve title döndürebilir; handler izin verdiği alanları seçer. JSON text’inin browser’a gelmesi database satırının aynen taşındığı anlamına gelmez. Serialization alanları ve biçimi belirler; browser parsing ile text’ten kullanılabilir veri üretir. Bu iki dönüşüm veri sahibini veya access hakkını kendiliğinden değiştirmez.

Website, application ve API nasıl birleşir?

Website birbiriyle ilişkili sayfa ve resources bütününü anlatır. Web application bu yüzey üzerinden işlev sunar: kitap görüntüleme, arama veya kişisel liste oluşturma gibi. Web API ise programların request/response sözleşmesiyle kullanacağı bir arayüzdür. Aynı ürün hem HTML website hem JavaScript application hem JSON API içerebilir; bunlar birbirini dışlayan ürün sınıfları değildir.

Bir statik sayfa yalnız HTML/CSS ve isteğe bağlı JavaScript dosyalarıyla sunulabilir; her web sitesi database gerektirmez. Dinamik üründe routing, validation, policy, storage, jobs ve telemetry gibi parçalar eklenebilir. Bunların hepsi ayrı deployment olmak zorunda değildir. Atlas labının storage adapter’ı memory içindeki verilere local call yapar; production database driver’ları farklı protokoller veya local embedded erişim kullanabilir. Sırf database simgesi var diye oraya HTTP paketi çizilmez.

Ekran ile otoriteyi ayrı tut

Browser kullanıcıya görünüm ve kontrol sağlar; server’ın koruduğu kayıt üzerinde son izin kararı trusted server/service tarafına aittir. Browser’ın “bu kullanıcı owner” göstermesi server policy’sinin çalıştığını kanıtlamaz. Handler’ın storage’a erişebilmesi de her client’in bütün kayıtlara yetkili olduğu anlamına gelmez.

Bu ilk actor haritası DNS, TLS veya bütün deployment topolojisini açıklamaz. Reverse proxy ve CDN bazı ürünlerde browser ile origin arasında bulunur; daha sonra HTTP intermediary katmanında açacağız. Şimdilik her ok için “hangi taraf üretir, hangi taraf tüketir, bu local call mı HTTP mi?” sorularını cevaplayabilmek gerekir.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Public projection

  1. Kartın hedefi belli

    Atlas book-view yalnız public kitabın id/title alanlarını ister. Browser görünümü storage’daki bütün alanlara erişim gerekçesi oluşturmaz.

    Browser
    GET book-view / id,title hazır
    Handler
    Request yok
    Public projection
    Alan sözleşmesi okunmadı
  2. Client seçimi handler’da

    HTTP request handler’a ulaştı. Handler’ın application-service tarafından işletilmesi, user-device kaynaklı seçimin güvenilir metadata olduğu anlamına gelmez.

    Browser
    GET book-view / id,title hazır
    Handler
    book selection alındı
    Public projection
    Alan sözleşmesi okunmadı
  3. Storage çağrısı yereldir

    handler ve store bu inventory’de aynı application-service sahibindedir. Seeded record lookup local-call/local-return’dür; ayrı kutu tek başına network isolation sağlamaz.

    Browser
    GET book-view / id,title hazır
    Handler
    Seeded record okundu
    Public projection
    Alan sözleşmesi okunmadı
  4. Private field sınırı görüldü

    publicFields=[id, title] ve excludedFields=[editorialPrivateNote] ayrı sınıflardır. Projection public sözleşmeyi seçer; frontend’in sonradan gizlemesine güvenmez.

    Browser
    GET book-view / id,title hazır
    Handler
    Seeded record okundu
    Public projection
    Projection: id,title
  5. Çıkış gate’i uygulamada

    Handler id/title projection’ını JSON representation olarak hazırlar. Storage şeması response şemasını otomatik belirlemez.

    Browser
    GET book-view / id,title hazır
    Handler
    Public JSON hazır; editorialPrivateNote yok
    Public projection
    Projection: id,title
  6. Browser yalnız public alan aldı

    HTTP JSON representation browser’a ulaştı. id/title gösterilebilir; editorialPrivateNote gönderilmez. Bu çıkış kararı yalnız gösterilen alanların gizliliğini açıklar; kaydın değiştiğini veya hizmetin erişilebilirliğini ölçmez.

    Browser
    id,title / private note yok
    Handler
    Public JSON hazır; editorialPrivateNote yok
    Public projection
    Projection: id,title

Çıkış farkı

  1. Kartın hedefi belli

    Atlas book-view yalnız public kitabın id/title alanlarını ister. Browser görünümü storage’daki bütün alanlara erişim gerekçesi oluşturmaz.

    Browser
    GET book-view / id,title hazır
    Handler
    Request yok
    Public projection
    Alan sözleşmesi okunmadı
  2. Client seçimi handler’da

    HTTP request handler’a ulaştı. Handler’ın application-service tarafından işletilmesi, user-device kaynaklı seçimin güvenilir metadata olduğu anlamına gelmez.

    Browser
    GET book-view / id,title hazır
    Handler
    book selection alındı
    Public projection
    Alan sözleşmesi okunmadı
  3. Storage çağrısı yereldir

    handler ve store bu inventory’de aynı application-service sahibindedir. Seeded record lookup local-call/local-return’dür; ayrı kutu tek başına network isolation sağlamaz.

    Browser
    GET book-view / id,title hazır
    Handler
    Seeded record okundu
    Public projection
    Alan sözleşmesi okunmadı
  4. Private field sınırı görüldü

    publicFields=[id, title] ve excludedFields=[editorialPrivateNote] ayrı sınıflardır. İnceleme için verilmiş karşılaştırma listesi not alanını da içerir; bu, mevcut server’ın o alanı sızdırdığı iddiası değildir.

    Browser
    GET book-view / id,title hazır
    Handler
    Seeded record okundu
    Public projection
    Karşılaştırma: id,title,editorialPrivateNote
  5. Çıkış gate’i uygulamada

    Karşılaştırma listesi publicFields ile eşleşmez. editorialPrivateNote çıkışı public response’tan önce durdurulur; UI gizleme buna alternatif değildir.

    Browser
    GET book-view / id,title hazır
    Handler
    Public JSON hazır; editorialPrivateNote yok
    Public projection
    Karşılaştırma: id,title,editorialPrivateNote
  6. Browser yalnız public alan aldı

    HTTP JSON representation browser’a ulaştı. id/title gösterilebilir; editorialPrivateNote gönderilmez. Bu çıkış kararı yalnız gösterilen alanların gizliliğini açıklar; kaydın değiştiğini veya hizmetin erişilebilirliğini ölçmez.

    Browser
    id,title / private note yok
    Handler
    Public JSON hazır; editorialPrivateNote yok
    Public projection
    Karşılaştırma: id,title,editorialPrivateNote

VARSAYIM · SINIR · KONTROL

Actor rolünü access hakkı sanmak

Normal API akışında handler, client’ten gelen seçimi alır ve kendi iş kuralıyla değerlendirir. “Request backend’e ulaşmış, dolayısıyla storage’daki bütün alanlar sunulabilir” varsayımı yanlıştır. Ulaşabilirlik bir permission değildir. Bu hata response alanlarının veya private resources’ın gereğinden geniş açılmasına yol açabilir.

Örnekte public kitabın title alanını göstermek meşru işlevdir; editorialPrivateNote başka bir veri sınıfıdır. Public API representation’ına bu notu dahil etmemek bir output policy kararıdır. Frontend’in notu gizlemesi gönderilen verinin gizliliğini geri getirmez. Etki yalnız gerçekten çıkan verinin kapsamıyla değerlendirilir.

Kutular arasında değişen güven

Client’in request’i handler için dış girdidir. Handler tarafından oluşturulan storage seçimi ise server’ın sorumluluğundadır. Client’in object veya role etiketini server’ın kendi metadata’sı gibi kabul etmesi trust boundary’yi yanlış yere taşır. Bunun kaynağı browser’ın kötü olması değil, iki kaynağın aynı otorite kabul edilmesidir.

Engelleyici tasarım her girdinin kaynağını açık tutar, gerekli formatı doğrular ve permission’ı trusted tarafta kurar. HTTPS taşıma kanalını korusa da client’in bütün application girdilerini doğru veya yetkili hale getirmez. Transport güvenliği ile business authority ayrı ders sorularıdır.

Her error bir compromise değildir

Kitap bulunamadığında handler’ın 404 vermesi, storage’ın erişilememesi veya UI’da boş durum görünmesi farklı sonuçlardır. Bir actor haritası, bunlardan hangisinin security policy ihlali olduğunu tek başına söylemez. Kitap ekranı açılmaması bir kullanılabilirlik sorunu olabilir; private alanın çıkması gizlilik ihlalidir.

Bu ayrım teknik incelemede gerekli kanıtı belirler. Başarısız UI görüntüsü üzerinden server’ın bütün verisinin kaybolduğunu iddia etme; hangi actor’ın hangi state’i değiştiğini ve neyin dışarı çıktığını ayrı incele.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Sahipler eşleşti

  1. Kaynağı işleten owner’ı ayır

    actors[].owner user-device veya application-service değeridir. Bir component’i işleten owner, bir kitap kaydının owner’ı değildir; evidence kapsamı da bu component’e aittir.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Kanıt atanmadı
    Coverage incelemesi
    Sonuç yok
  2. HTTP observation sınırlıdır

    Browser Network kaydının producer’ı browser’dır; gözlenen target ve response, yalnız browser’ın HTTP sınırını açıklar. Server lookup’ını görmek için handler veya store’dan aynı okuma işlemine ait ayrı kayıt gerekir.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Browser → HTTP receipt
    Coverage incelemesi
    Sonuç yok
  3. Local çağrı kaydı ayrı tutuldu

    flows[].kind local-call/local-return’dür. Store observation yalnız seeded record lookup kapsamını destekler, uzak database transport’u göstermez.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Store → local lookup
    Coverage incelemesi
    Sonuç yok
  4. Public output sözleşmesi okundu

    resources[].publicFields id/title, excludedFields editorialPrivateNote olarak verilmiştir. Bu isimler beklenen çıkışı tanımlar; inventory gerçek delivery ölçümü değildir.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store → local lookup
    Coverage incelemesi
    Sonuç yok
  5. İhlal ile boş görünümü ayır

    Missing kitap için açıklanabilir boş görünüm normal negative control olabilir. Private field çıktısı başka kanıt ister; bir UI error veya response boyutu yalnız başına confidentiality finding değildir.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store → local lookup
    Coverage incelemesi
    Output sınıfı karşılaştırılmalı
  6. Inventory kapsamı korundu

    Component owner ve HTTP/local ilişkileri birbirinden ayrıldı. Bu harita gerçek network teslimi veya persistence durability kanıtı değildir.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store → local lookup
    Coverage incelemesi
    Owner ve HTTP/local eşlemesi tutarlı

Store gözlemi yok

  1. Kaynağı işleten owner’ı ayır

    actors[].owner user-device veya application-service değeridir. Bir component’i işleten owner, bir kitap kaydının owner’ı değildir; evidence kapsamı da bu component’e aittir.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Kanıt atanmadı
    Coverage incelemesi
    Sonuç yok
  2. HTTP observation sınırlıdır

    Browser Network kaydının producer’ı browser’dır; gözlenen target ve response, yalnız browser’ın HTTP sınırını açıklar. Server lookup’ını görmek için handler veya store’dan aynı okuma işlemine ait ayrı kayıt gerekir.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Browser → HTTP receipt
    Coverage incelemesi
    Sonuç yok
  3. Local çağrı kaydı ayrı tutuldu

    flows[].kind local-call/local-return’dür. Bu inceleme kopyasında store observation bulunmaz; packet yokluğundan lookup yapılmadığı sonucu çıkarılmaz.

    Actor inventory
    browser / handler / store
    Gözlem eşlemesi
    Store observation eksik
    Coverage incelemesi
    Sonuç yok
  4. Public output sözleşmesi okundu

    resources[].publicFields id/title, excludedFields editorialPrivateNote olarak verilmiştir. Bu isimler beklenen çıkışı tanımlar; inventory gerçek delivery ölçümü değildir.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store observation eksik
    Coverage incelemesi
    Sonuç yok
  5. İhlal ile boş görünümü ayır

    Missing kitap için açıklanabilir boş görünüm normal negative control olabilir. Private field çıktısı başka kanıt ister; bir UI error veya response boyutu yalnız başına confidentiality finding değildir.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store observation eksik
    Coverage incelemesi
    Output sınıfı karşılaştırılmalı
  6. Inventory kapsamı korundu

    HTTP sınırı bilinir, store iç işlemi UNKNOWN kalır. Sonraki inceleme store owner’ından aynı operation’a ait local observation ister.

    Actor inventory
    id,title / exclude note
    Gözlem eşlemesi
    Store observation eksik
    Coverage incelemesi
    UNKNOWN: local lookup

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Hangi gözlem hangi actor’ı gösterir?

Browser Network kaydı HTTP target, status ve browser’ın gördüğü response’u gösterir. Handler trace’i application’ın hangi branch’i seçtiğini gösterebilir. Storage adapter observation’ı kaydın nasıl bulunduğunu açıklar. Browser’daki response, storage’ın gerçek şemasını veya bütün query’lerini kendi başına kanıtlamaz.

Atlas inventory’sindeki actors[].owner, component’i işleten tarafı; flows[].kind ise HTTP veya aynı process içindeki local call/return ilişkisini gösterir. Bu inventory beklenen topolojidir, çalışma kaydı değildir. Bir okumayı incelemek için browser’ın target/response gözlemini handler’ın branch ve storage adapter’ın lookup kaydıyla aynı işlem üzerinden ilişkilendir. Store kaydı yoksa lookup’ın yapılmadığını söyleyemezsin; yalnız bu kısmın gözlenmediğini bilirsin.

Normal ve beklenmeyen output’u ayır

Positive baseline, public kitabın id/title alanlarıyla gösterilmesidir. Benign negatif örnek, verilmiş missing senaryosunda 404 ve açıklanabilir boş görünüm elde etmektir. Public output sözleşmesinin dışındaki private alanı görmek ise inceleme gerektirir. Bir error status tek başına bunu ifade etmez.

Bu dersin JSON inventory artifact’ini alan adları ve boundary ilişkileri üzerinden incele. Delivered-field listesi ile public representation alanlarını karşılaştırmak açıklanabilir bir başlangıç kontrolüdür. Beklenen isimleri bilmeden “response çok büyük” gibi bir alarm anlamlı bir security sonucu üretmez.

Haritayı bakım aracı olarak kullan

Yeni storage, proxy veya export job eklenince aynı inventory’ye owner, input source ve enforcement noktası ekle. Actor sayısını artırmak otomatik isolation sağlamaz; hangi güven sınırının hangi control ile korunduğu belirtilmelidir. Log tasarımı da component’lere göre yapılır, credential değerleri bu haritaya yazılmaz.

Başlangıç kontrolü: browser’a yalnız public alanlar çıkar mı, handler branch’i doğru trace’e bağlanır mı, storage local/remote etiketi uygulamayla uyumlu mu? Bu soruları normal found ve missing örnekleriyle doğrula; eksik telemetry’yi ayrı kayıtla.

ŞİMDİ VAKAYA UYGULA

Storage alanı browser’a neden ve kim tarafından çıkar?

Atlas kitap ekranı, kitabın id ve title alanlarını gösterir. editorialPrivateNote public representation dışında tutulur. Handler ile memory store aynı process’te çalışsa bile verinin dışarı çıkma kararını application verir.

Bağlı vakada HTTP yanıtını application, görünen kartı browser üretir. Önce bu iki rolü göster; ardından bir 200 yanıtından neden yeni ekran sonucu çıkaramayacağını açıkla.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Atlas actor ve resource inventory

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "system": "atlas-book-screen",
  "actors": [
    {
      "id": "browser",
      "owner": "user-device",
      "role": "HTTP client",
      "state": "DOM and JS memory"
    },
    {
      "id": "handler",
      "owner": "application-service",
      "role": "HTTP server route handler",
      "state": "request-local processing"
    },
    {
      "id": "store",
      "owner": "application-service",
      "role": "in-memory storage adapter",
      "state": "seeded book records"
    }
  ],
  "flows": [
    {
      "from": "browser",
      "to": "handler",
      "kind": "HTTP",
      "data": "book selection"
    },
    {
      "from": "handler",
      "to": "store",
      "kind": "local-call",
      "data": "record lookup"
    },
    {
      "from": "store",
      "to": "handler",
      "kind": "local-return",
      "data": "record or missing"
    },
    {
      "from": "handler",
      "to": "browser",
      "kind": "HTTP",
      "data": "JSON representation"
    }
  ],
  "resources": [
    {
      "id": "book-view",
      "url": "/api/book?case=found",
      "representation": "application/json",
      "publicFields": [
        "id",
        "title"
      ],
      "excludedFields": [
        "editorialPrivateNote"
      ]
    }
  ],
  "deployment": "Synthetic roles; handler and store may share one process."
}
actors[].owner
Component’i işleten otorite; record owner ile aynı kavram değil.
flows[].kind
HTTP ile local function call/return ayrımı.
resources[].representation
HTTP ile sunulan veri biçimi; disk dosyası veya storage şeması değil.
publicFields / excludedFields
Public output sözleşmesindeki alanlar ve gönderilmeyecek private alan örneği.

İnert sentetik inventory; gerçek service discovery veya packet capture değil. DNS/TLS/deployment ayrıntısı ve gerçek storage persistence’ı bu haritada modellenmez.

İki yanlış kanı

Internet ve Web aynı sistemin iki adıdır.

Internet ağ altyapısıdır; Web onun üzerinde çalışabilen services bütünüdür. Web private/local ağda da çalışabilir.

Her web application’ın ayrı database server’ı vardır.

Statik resources database gerektirmeyebilir; storage local/embedded/remote olabilir. Diyagramdaki roller ayrı host olmak zorunda değildir.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Handler ve store aynı process içinde. Kitabı okumak için ayrı database network hop’u zorunlu mu?

  1. Ayrı database network hop’u zorunlu değildir.
  2. Store kartı varsa en az bir database hop’u gerekir.
Gerekçeli cevabı oku

Ayrı database network hop’u zorunlu değildir. — Örnek local-call/local-return kullanır. Storage sorumluluğunun ayrı olması, ayrı host gerektirmez.

JSON representation hangi alanları taşımak üzere tanımlanmış?

Dersten seçilen artifact alanları; öğretim örneği

resources[0].publicFields
["id","title"]
resources[0].excludedFields
["editorialPrivateNote"]
  1. id/title public; editorialPrivateNote dışarı sunulmaz.
  2. Resource’un bütün alanları browser’a gönderilir.
Gerekçeli cevabı oku

id/title public; editorialPrivateNote dışarı sunulmaz. — publicFields ve excludedFields görünür veri sözleşmesini belirler. Bütün storage row’unun gönderildiği anlamına gelmez.

Internet çalışıyor, fakat kitap endpoint’i yanlış representation döndürüyor. Neden bu bir Web application sorunu?

Gerekçeli cevabı oku

Internet bağlantı altyapısını sağlar. Web, HTTP resource ve representation etkileşimini kullanır. Handler kitabın hangi alanlarını JSON olarak sunacağını belirler. Network erişiminin olması application’ın bu kararını doğru yaptığını göstermez.

□ HTTP client/server rollerini ayırdım.

□ Resource ile representation’ı eşitlemedim.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam