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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
API representation
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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ı
- 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ı
- 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
- Çı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
- 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ı
- 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ı
- 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ı
- 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ı
- 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
- Çı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
- 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
- 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
- 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
- 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
- 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
- İ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ı
- 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
- 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
- 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
- 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
- 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
- İ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ı
- 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?
- Ayrı database network hop’u zorunlu değildir.
- 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"]
- id/title public; editorialPrivateNote dışarı sunulmaz.
- 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
- MDN — How does the Internet work?Internet and the web
- MDN — How the web worksClients and servers · The other parts of the toolbox · So what happens, exactly?
- RFC 9110 — HTTP Semantics3.1 Resources · 3.2 Representations · 3.3 Connections, Clients, and Servers · 3.7 Intermediaries · 8.6 Content-Length · 15.5.5 404 Not Found
- OWASP Authorization Cheat SheetIntroduction · Validate the Permissions on Every Request · Verify that Authorization Checks are Performed in the Right Location
- OWASP Logging Cheat SheetEvent data sources · Event attributes · Data to exclude · Verification
- RFC 8446 — TLS 1.31 Introduction