WEB / WEB-11.S02
CORS, framing ve cross-window message validation
Response exposure, embedding ve Window reply neden farklı approval kararlarıdır?
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Valid message
- Pending read
Atlas parent preview-A reference’ını ve read-7 transaction’ını tutar. Preview’da Tea & Bread title’ı zaten hazırdır; bu dal API GET’i yapmaz. Window reply henüz hazırlanmış veya parent’a teslim edilmiş değildir.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Preview-A; title ready
- Owned API
- Request yok; read yok
- Reply hazır
Preview fixed title reply’ı exact parent targetOrigin için hazırlar; bu HTTP request değildir.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Reply read-7 ready; exact target
- Owned API
- Request yok; read yok
- Message task arrival
Queued Window task receiver’a delivered olmuştur; origin/source henüz approved değildir.
- Atlas parent
- Message event arrived; checks pending
- Book preview
- Reply read-7 ready; exact target
- Owned API
- Request yok; read yok
- Local identity gate
Declared event.origin ve retained preview source reference bu iki selected row’da eşleşir.
- Atlas parent
- Origin/source matched; data pending
- Book preview
- Reply read-7 ready; exact target
- Owned API
- Request yok; read yok
- Local schema/transaction
Closed kind/version/title schema ile pending requestId ayrı değerlendirilir; stale read current read değildir.
- Atlas parent
- Schema valid; read-7 matched
- Book preview
- Reply read-7 ready; exact target
- Owned API
- Request yok; read yok
- Local display outcome
Origin/source, title schema ve read-7 transaction eşleşti; Tea & Bread literal text olarak bağlandı. Bu kabul HTML yorumlama izni değildir; API bu dalda request veya read almadı.
- Atlas parent
- Literal Tea & Bread; read-7
- Book preview
- Reply read-7 ready; exact target
- Owned API
- Request yok; read yok
Stale reply
- Pending read
Atlas parent preview-A’dan read-7 sonucunu bekler. Bu dal daha sonra aynı preview’dan read-6 reply’sini seçer; doğru origin ve source, eski transaction’ı geçerli yapmaz. Henüz parent message receipt’i yoktur.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Preview-A; title ready
- Owned API
- Request yok; read yok
- Reply hazır
Preview fixed title reply’ı exact parent targetOrigin için hazırlar; bu HTTP request değildir.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Reply read-6 ready; exact target
- Owned API
- Request yok; read yok
- Message task arrival
Queued Window task receiver’a delivered olmuştur; origin/source henüz approved değildir.
- Atlas parent
- Message event arrived; checks pending
- Book preview
- Reply read-6 ready; exact target
- Owned API
- Request yok; read yok
- Local identity gate
Declared event.origin ve retained preview source reference bu iki selected row’da eşleşir.
- Atlas parent
- Origin/source matched; data pending
- Book preview
- Reply read-6 ready; exact target
- Owned API
- Request yok; read yok
- Local schema/transaction
Closed kind/version/title schema ile pending requestId ayrı değerlendirilir; stale read current read değildir.
- Atlas parent
- Schema valid; read-6 stale denied
- Book preview
- Reply read-6 ready; exact target
- Owned API
- Request yok; read yok
- Local display outcome
Message event parent’a ulaştı ve origin/source geçti; read-6 beklenen read-7 ile eşleşmediği için title değişmedi. Message receipt transaction kabulü değildir ve API read bu dalda yapılmadı.
- Atlas parent
- Title unchanged; stale ignored
- Book preview
- Reply read-6 ready; exact target
- Owned API
- Request yok; read yok
CORS read denied
- Normal read intent
Atlas browser api.example.org’dan Tea & Bread title’ını okumak ister. Seçilen GET include mode’dadır ve response ACAO * kullanır; exposure kararı ancak response arrival sonrası verilir. Henüz API request veya server read yoktur.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Preview-A; title ready
- Owned API
- Request yok; read yok
- GET hazır
Fixed GET credentials-mode include ile hazırlanır; gerçek cookie veya connection kullanılmaz.
- Atlas parent
- GET request ready; mode=include
- Book preview
- Preview-A; title ready
- Owned API
- Request yok; read yok
- API request aldı
Normal GET API’ye varmıştır; CORS exposure sonucu server request receipt’ini geri almaz.
- Atlas parent
- GET request ready; mode=include
- Book preview
- Preview-A; title ready
- Owned API
- GET arrived; public read pending
- Local public response
Server public read’i bu örnekte kabul eder; ACAO wildcard içeren JSON response hazırlar.
- Atlas parent
- GET request ready; mode=include
- Book preview
- Preview-A; title ready
- Owned API
- JSON response ready; ACAO=*
- Response browser’da
Response receiver’a varır; status/body availability ile CORS script exposure ayrı kalır.
- Atlas parent
- Response arrived; exposure pending
- Book preview
- Preview-A; title ready
- Owned API
- JSON response ready; ACAO=*
- Local CORS gate
Include mode’da wildcard exposure kabul edilmez; bu örnekte server read’in gerçekleşmiş olması değişmez.
- Atlas parent
- Script read blocked; server read allowed
- Book preview
- Preview-A; title ready
- Owned API
- JSON response ready; ACAO=*
Ancestor reddi
- Policy fixture hazır
Preview response’unun enforce frame-ancestors listesi Atlas origin’ine izin verir. Seçilen zincirde immediate Atlas parent’ın üstünde reader.example.net vardır; sonraki local gate bütün zinciri karşılaştırır. Resource download veya API read yapılmaz.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Preview-A; title ready
- Owned API
- Request yok; read yok
- Local response policy
Header-enforced frame-ancestors policy parent allowlist’ini protected preview’dan alır.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Header policy; all ancestors pending
- Owned API
- Request yok; read yok
- Local ancestor gate
Immediate Atlas parent allowed olsa da farklı outer ancestor selected chain’i reddettirir.
- Atlas parent
- read-7 pending; title yok
- Book preview
- Outer ancestor denied; no embedding
- Owned API
- Request yok; read yok
- Local UI consequence
Parent declared embedding denial’ı görür; API permission veya CORS denial diye yorumlamaz.
- Atlas parent
- Embedding unavailable; title unchanged
- Book preview
- Outer ancestor denied; no embedding
- Owned API
- Request yok; read yok
- Local explanatory state
Immediate Atlas parent izinli olsa da outer reader.example.net ancestor’ı listede değildir; embedding reddedildi. UI bu policy nedenini gösterir, API read veya CORS ret sonucu eklemez.
- Atlas parent
- Ancestor policy explanation ready
- Book preview
- Outer ancestor denied; no embedding
- Owned API
- Request yok; read yok
ROLLER · STATE · VERİ AKIŞI
CORS neyi expose eder?
Atlas browser’ın Atlas API’den Tea & Bread JSON title’ını okuyabilmesi, resource server’ın browser origin’e response exposure izniyle ilgilidir. API session ve object policy’sini ayrıca değerlendirir. Simple GET server’a ulaşıp normal response üretebilir ama CORS kontrolü browser script’inin body okumasını engelleyebilir; bu, server action’ın hiç gerçekleşmediğini göstermez. Credentials mode include için exact ACAO origin ve ACAC true gerekir. ACAO * bu mode’da exposure izni vermez; cookie’nin fiilen gönderilmemiş olması wildcard’ı kabul edilebilir yapmaz. Credentials gönderimi SameSite ve storage policy’ye de bağlıdır. Method, header ve value koşulları preflight’i asıl exchange’in önüne koyabilir. Preflight izni object authorization kararı değildir.
Framing policy response’un owner’ına aittir
Book preview document kendisini kimlerin embed edebileceğini response header’daki CSP frame-ancestors ile sınırlar. Parent’ın frame-src’u hangi child resource’u yükleyebileceğini anlatır; aynı yönlü kontrol değildir. frame-ancestors bütün ancestor chain’i kontrol eder, yalnız immediate parent’ı değil; default-src’dan fallback almaz ve meta delivery’de bu directive uygulanmaz. Enforced frame-ancestors supporting browser’da X-Frame-Options’ı override eder. XFO DENY/SAMEORIGIN legacy compatibility seçeneğidir; current SAMEORIGIN tüm ancestors’ın same-origin olmasını ister, RFC7034 eski implementation farklarını belgeler. Obsolete ALLOW-FROM güncel allowlist çözümü değildir. Framing denial script DOM read veya server permission denial ile eşitlenmez; bu UI embedding sınırıdır.
Window message dört gate’ten geçer
Atlas parent preview-A WindowProxy reference’ını ve read-7 pending transaction’ını tutar. Harmless reply kind=book-title, version=1, requestId=read-7, title=Tea & Bread olarak hazırlanır ve exact parent targetOrigin’e queue edilir. Receiver event.origin’ı expected sender origin ile, event.source’ı retained preview reference ile, data’yı closed expected schema ile ve requestId’yi pending transaction ile karşılaştırır. event.origin send-time origin’dir; WindowProxy aynı reference kalırken document sonradan navigate edebilir. Payload’ın kendi origin/source string alanı browser event identity yerine geçmez. Structured clone copied data’yı taşır, trust veya ordering of independent async replies sağlamaz. Transferred MessagePort capability başka channel contract’ıdır; her port message için Window origin/source yüzeyi varsayılmaz.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Read ve framing
- Server read ile exposure
CORS satırlarında serverReadAllowed true kalıyor. Include wildcard ise expectedExposed false; server’ın public data vermesi browser script’inin body’yi okuyacağı anlamına gelmiyor.
- Capability ledger
- Server read true / include wildcard exposed false
- Policy boundary review
- Henüz değerlendirilmedi
- Kabul sonucu
- Henüz değerlendirilmedi
- Olumlu CORS controls
Include exact Atlas ACAO ve lowercase true okunabilir; omit wildcard public satırı da true. Credentials mode ile response contract birlikte değerlendirilir, generic trusted origin etiketi yetmez.
- Capability ledger
- Server read true / include wildcard exposed false
- Policy boundary review
- Exact include true / public omit true
- Kabul sonucu
- Henüz değerlendirilmedi
- Framing başka soru
Owned-chain iki Atlas ancestor’ı ile enforce frame-ancestors’ı geçer. Aynı capability script read izni veya business action yetkisi değildir; framePolicyGrantsRead false.
- Capability ledger
- Server read true / include wildcard exposed false
- Policy boundary review
- Exact include true / public omit true
- Kabul sonucu
- Embedding allowed ≠ body readable
- Outer ancestor farkı
Frame-denied immediate Atlas parent yanında reader.example.net ancestor taşıyor. Bütün ancestor’lar değerlendirilir; yalnız en yakın parent’ı doğrulamak chain kararını açıklamaz.
- Capability ledger
- Outer reader ancestor / frame denied
- Policy boundary review
- Exact include true / public omit true
- Kabul sonucu
- Embedding allowed ≠ body readable
- CSP ve XFO delivery
Desteklenen enforce header frame-ancestors seçildiğinde owned-chain XFO DENY’ye rağmen allowed true. Report-only branch ise enforce ancestor izni vermez ve XFO DENY ile false kalır.
- Capability ledger
- Outer reader ancestor / frame denied
- Policy boundary review
- Enforce CSP precedence / report XFO deny
- Kabul sonucu
- Embedding allowed ≠ body readable
- Üç izni birleştirme
Read, embed ve action ayrı policy’lerdir. CORS body exposure framing izni, frame-ancestors da CSRF/action-intent kontrolü değildir; normal title örneği bu sınırları dar tutar.
- Capability ledger
- Outer reader ancestor / frame denied
- Policy boundary review
- Enforce CSP precedence / report XFO deny
- Kabul sonucu
- Exposure/framing/action policies separate
Eski message
- Current request bağı
Parent preview-A’dan read-7 için book-title version 1 bekliyor. Exact targetOrigin Atlas; title Tea & Bread string olarak normal schema’ya ait.
- Capability ledger
- preview-A / read-7 / version1
- Policy boundary review
- Henüz değerlendirilmedi
- Kabul sonucu
- Henüz değerlendirilmedi
- Eski requestId
Stale-message origin ve source doğru iken read-6 taşıyor. Current transaction’a bağlı olmadığı için expected false; trusted sender normal async lifecycle’da eski sonuç verebilir.
- Capability ledger
- preview-A / read-7 / version1
- Policy boundary review
- Correct sender / read-6 rejected
- Kabul sonucu
- Henüz değerlendirilmedi
- Reference farkı
Wrong-reference aynı origin ile preview-B’den geliyor ve reddediliyor. Origin equality hangi WindowProxy instance’ının cevap verdiğini tek başına seçtirmiyor.
- Capability ledger
- preview-A / read-7 / version1
- Policy boundary review
- Correct sender / read-6 rejected
- Kabul sonucu
- Same origin / preview-B rejected
- Shape kontrolü
Shape-denied title null taşır; string ve maxTitle 80 sözleşmesini karşılamaz. Origin/source doğruluğu data’nın type, version veya closed keys kontrolünü doldurmaz.
- Capability ledger
- title null / shape rejected
- Policy boundary review
- Correct sender / read-6 rejected
- Kabul sonucu
- Same origin / preview-B rejected
- Clone trust değildir
Copied message data WindowProxy identity’sinin yerine geçmez. Normal kabul yalnız title text data’ya ait; messageAcceptedPermitsHTML false ve HTML/code interpretation izni eklenmiyor.
- Capability ledger
- title null / shape rejected
- Policy boundary review
- Accepted title text ≠ HTML/code permission
- Kabul sonucu
- Same origin / preview-B rejected
- Kabulün dar etkisi
Source, origin, schema ve pending request birlikte geçince readonly title kabul edilir. Bu karar API object yetkisi, framing veya bütün event lifecycle başarısı diye genişletilmez.
- Capability ledger
- title null / shape rejected
- Policy boundary review
- Accepted title text ≠ HTML/code permission
- Kabul sonucu
- Correlated readonly result / separate server policy
VARSAYIM · SINIR · KONTROL
Response read, UI embedding ve business action ayrı risklerdir
Normal title read, preview embedding ve reply delivery üç farklı capability ister. Bozulan varsayım tek origin allow kararının hepsini authorize ettiğidir. CORS generic origin reflection veya credentials-mode yanlışlığı script exposure sınırını bozar; bunun etkisi API’nin gerçekten döndürdüğü data ve authenticated object policy ile sınırlıdır. Framing policy eksikliği relevant action UI’ının başka context içinde görünmesine izin verebilir; clickjacking için yanıltılmış kullanıcı etkileşimi ve uygulanabilir UI/action koşulları ayrıca gerekir. CORS header’ı framing policy, frame-ancestors da action-intent/CSRF kontrolü yerine geçmez. Artifact benign GET ve ordinary ancestor matrix kullanır; overlay, exploit form veya üçüncü site isteği üretmez.
Trusted sender bile stale veya yanlış shape gönderebilir
Origin doğru iken source reference başka preview olabilir; origin/source doğru iken read-6 reply artık read-7 UI isteğine ait değildir. Missing title, extra field veya yanlış version ayrı schema gate’inde reddedilir. Bu failure sonuçları gerçek saldırıdan önce normal multi-window ve async lifecycle’da da görülebilir. Receiver string matching ile domain suffix aramaz ve payload’ın source alias’ını browser identity saymaz. Accepted message ordinary h2 text data olarak tüketilir; message approval HTML/code interpretation izni değildir. Parent’a queue edilen reply’nin handler exception’ı sender’a synchronous success/failure dönmez. Kontrol retained reference, expected message kind/types ve pending operation correlation’dır; exact targetOrigin sender yönünde ayrı privacy boundary tutar.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Matrix controls
- CORS matrisi
corsRows API response koşulları ile browser exposure beklentisini, framing.rows resource’un ancestor policy’sini, messageRows parent receiver’ın kabul koşullarını tutar. Bunlar verilmiş örnek kayıtlarıdır. Normal/stale-message Window task’i kullanır ve API’ye gitmez; cors-denied GET API’ye ulaşır, frame-denied ise yalnız yerel policy hesabıdır. correlation-gap’te görülen title bu yolların hangisinin çalıştığını kanıtlamaz. Explicit include ve public omit exposed true; include wildcard ve wrong-origin false. ServerReadAllowed ile expectedExposed farklı alanlar; aynı success sözcüğü altında kaybolmuyorlar.
- Capability kayıtları
- Two exposure allows / two exposure denies
- Kanıt comparison
- Henüz değerlendirilmedi
- Review sonucu
- Henüz değerlendirilmedi
- Ancestor matrisi
Owned-chain true, outer-reader frame-denied false. Header enforce CSP ile legacy XFO SAMEORIGIN ve report-only XFO DENY ayrı branch’lerde değerlendirilir.
- Capability kayıtları
- Two exposure allows / two exposure denies
- Kanıt comparison
- Complete chain / CSP vs XFO fallback
- Review sonucu
- Henüz değerlendirilmedi
- Message matrisi
Normal read-7 kabul edilir; stale id, wrong reference, wrong origin ve null title ayrı reddedilir. Her olumsuz kontrol farklı koşulu sınar; tek deny Boolean’ına indirgenmez.
- Capability kayıtları
- Two exposure allows / two exposure denies
- Kanıt comparison
- Complete chain / CSP vs XFO fallback
- Review sonucu
- One normal / four independent message rejects
- Evidence kaynağı
Browser exposure, protected response header/ancestor chain ve receiver acceptance farklı gözlem noktaları. Server audit kendi read/action’ını bilir; bütün browser zincirini tek başına doğrulamaz.
- Capability kayıtları
- Browser/response/receiver/server scopes distinct
- Kanıt comparison
- Complete chain / CSP vs XFO fallback
- Review sonucu
- One normal / four independent message rejects
- Minimum comparison alanı
Origin-match, source-match, schema-valid ve transaction-match sonuçları correlation’a bağlanabilir. Raw private message body gerekmiyor; alias ve comparison sonucu bu dersin readonly örneğini açıklar.
- Capability kayıtları
- Browser/response/receiver/server scopes distinct
- Kanıt comparison
- Comparison results / no raw private body
- Review sonucu
- One normal / four independent message rejects
- Regression kapsamı
Finite typed rows policy decisions’i karşılaştırır. Gerçek CORS, CSP/XFO ve postMessage enforcement çalışmadığı için bu yerel sonuç browser compatibility veya production event başarısı diye sunulmaz.
- Capability kayıtları
- Browser/response/receiver/server scopes distinct
- Kanıt comparison
- Comparison results / no raw private body
- Review sonucu
- Finite matrices known / browser runtime separate
Correlation eksik
- Tek title gözlemi
corsRows API response koşulları ile browser exposure beklentisini, framing.rows resource’un ancestor policy’sini, messageRows parent receiver’ın kabul koşullarını tutar. Bunlar verilmiş örnek kayıtlarıdır. Normal/stale-message Window task’i kullanır ve API’ye gitmez; cors-denied GET API’ye ulaşır, frame-denied ise yalnız yerel policy hesabıdır. correlation-gap’te görülen title bu yolların hangisinin çalıştığını kanıtlamaz. Review yalnız Tea & Bread görüntüsünü görüyor; API exposure, ancestor chain ve accepted reply kayıtları eksik. Aynı başlık birden fazla yerel veya remote yolun sonucu olabilir.
- Capability kayıtları
- Title known / three capability records missing
- Kanıt comparison
- Henüz değerlendirilmedi
- Review sonucu
- Henüz değerlendirilmedi
- Frame görünümü yetmez
Frame’in görünmesi script body exposure veya message acceptance değildir. Parent’ın heading’i de exact targetOrigin delivery ve receiver schema kontrolünü tek başına kanıtlamaz.
- Capability kayıtları
- Title known / three capability records missing
- Kanıt comparison
- Visible frame/title ≠ capability proof
- Review sonucu
- Henüz değerlendirilmedi
- Üç belirsizliği koru
Bu eksik olay için exposed, frame policy decision ve current message accepted sonuçları UNKNOWN. Normal matrix’in true satırları olayın eksik alanlarına eklenmiyor.
- Capability kayıtları
- Title known / three capability records missing
- Kanıt comparison
- Visible frame/title ≠ capability proof
- Review sonucu
- Exposure/framing/acceptance UNKNOWN
- Gerekli correlation
Request mode/ACAO/ACAC, response policy delivery/chain ve message origin/source/schema/requestId ayrı toplanmalı. Her kayıt aynı readonly iş ve current display ile ilişkilendirilmeli.
- Capability kayıtları
- Needed: exposure/chain/message correlations
- Kanıt comparison
- Visible frame/title ≠ capability proof
- Review sonucu
- Exposure/framing/acceptance UNKNOWN
- Şema ile identity farkı
Structured clone’ın plain object’i kopyalaması sender WindowProxy’sini doğrulamaz. Missing source reference gerçek event identity diye uydurulmaz; accepted data text context’inde kalır.
- Capability kayıtları
- Needed: exposure/chain/message correlations
- Kanıt comparison
- Copied data ≠ sender identity
- Review sonucu
- Exposure/framing/acceptance UNKNOWN
- İnceleme sınırını bildir
Yeni evidence üç capability sorusunu ayrı yanıtlamalı. Bu olay için yalnız görülen title korunuyor; server yetkisi veya browser enforcement başarısı eklenmiyor.
- Capability kayıtları
- Needed: exposure/chain/message correlations
- Kanıt comparison
- Copied data ≠ sender identity
- Review sonucu
- Retain title / collect scoped capability evidence
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Her kontrolü çalıştığı yerde gözlemle
corsRows API response koşulları ile browser exposure beklentisini, framing.rows resource’un ancestor policy’sini, messageRows parent receiver’ın kabul koşullarını tutar. Bunlar verilmiş örnek kayıtlarıdır. Normal/stale-message Window task’i kullanır ve API’ye gitmez; cors-denied GET API’ye ulaşır, frame-denied ise yalnız yerel policy hesabıdır. correlation-gap’te görülen title bu yolların hangisinin çalıştığını kanıtlamaz. CORS kaydı request origin, credentials mode, ACAO/ACAC ve exposure sonucunu ilgili response ile eşleştirir; server read izni ile browser script’ine exposure ayrı alanlardır. Response origin’e göre değişiyorsa ilgili cache için Vary: Origin gerekir, fakat Vary permission kontrolü değildir. Framing incelemesi korunan resource’un response header’ını, enforce/report disposition’ını ve bütün ancestor zincirini toplar; meta veya default-src koruma kanıtı sayılmaz. Message acceptance kaydı origin-match/source-match/schema-valid/transaction-match ve reason alanlarını secret ya da tam message body’yi loglamadan ayırır. Browser diagnostics kendi exposure kararını, server audit kendi action’ını bilir; tek yüzey bütün zinciri kanıtlamaz.
Dört matrix’i tek boolean’a indirme
Regression, include credentials mode ile wildcard ACAO için script read’in engellenmesini bekler; omit public wildcard ve açıkça izin verilen origin ayrı olumlu kontrollerdir. Ancestor tablosu izinli zinciri, izinli immediate parent’ın üstündeki farklı origin’den ayırır; enforce CSP ile XFO fallback aynı branch değildir. Window kontrolleri doğru origin/yanlış reference, doğru reference/eski transaction ve yanlış schema koşullarını bağımsız karşılaştırır. Opaque origin veya port transfer içeren ürünler bu tuple-origin Window örneğine sessizce eklenmez. structuredClone ile ordinary data kopyasını kontrol etmek browser event identity, CORS veya framing enforcement’ını ölçmez. Text rendering ve server action gate’leri bu teslim ve kabul kararlarından ayrı korunur.
ŞİMDİ VAKAYA UYGULA
CORS, framing ve message acceptance aynı izin mi?
Atlas API body’sini okumak, preview’ı embed etmek ve read-7 için title reply’sini kabul etmek istiyor. Include wildcard response okunamıyor; ancestor chain’de başka origin framing kararını değiştirebiliyor. Doğru origin’den gelen read-6 reply ise current read-7 işini tamamlamıyor.
Vakadaki browser policy hangi ilişkiyi kontrol ediyor? Response exposure, destination veya framing kararını server’ın object permission kararıyla karıştırmadan açıkla.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Exposure, ancestors ve Window message defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"parentOrigin": "https://atlas.example.org",
"previewOrigin": "https://preview.example.org",
"previewReference": "preview-A",
"pendingRequestId": "read-7",
"apiOrigin": "https://api.example.org",
"title": "Tea & Bread",
"actualBrowser": false,
"actualMessage": false,
"actualRequest": false,
"actualFraming": false
},
"corsRows": [
{
"case": "explicit",
"requestOrigin": "https://atlas.example.org",
"credentialsMode": "include",
"acao": "https://atlas.example.org",
"acac": "true",
"serverReadAllowed": true,
"expectedExposed": true
},
{
"case": "cors-denied",
"requestOrigin": "https://atlas.example.org",
"credentialsMode": "include",
"acao": "*",
"acac": "true",
"serverReadAllowed": true,
"expectedExposed": false
},
{
"case": "public-wildcard",
"requestOrigin": "https://atlas.example.org",
"credentialsMode": "omit",
"acao": "*",
"acac": null,
"serverReadAllowed": true,
"expectedExposed": true
},
{
"case": "wrong-origin",
"requestOrigin": "https://atlas.example.org",
"credentialsMode": "omit",
"acao": "https://reader.example.net",
"acac": null,
"serverReadAllowed": true,
"expectedExposed": false
}
],
"framing": {
"resourceOrigin": "https://preview.example.org",
"rows": [
{
"case": "owned-chain",
"ancestors": [
"https://atlas.example.org",
"https://atlas.example.org"
],
"cspDelivery": "header",
"cspDisposition": "enforce",
"allowedOrigins": [
"https://atlas.example.org"
],
"xfo": "DENY",
"expectedAllowed": true
},
{
"case": "frame-denied",
"ancestors": [
"https://reader.example.net",
"https://atlas.example.org"
],
"cspDelivery": "header",
"cspDisposition": "enforce",
"allowedOrigins": [
"https://atlas.example.org"
],
"xfo": "DENY",
"expectedAllowed": false
},
{
"case": "legacy-own",
"ancestors": [
"https://preview.example.org"
],
"cspDelivery": null,
"cspDisposition": null,
"allowedOrigins": [],
"xfo": "SAMEORIGIN",
"expectedAllowed": true
},
{
"case": "report-only",
"ancestors": [
"https://atlas.example.org"
],
"cspDelivery": "header",
"cspDisposition": "report",
"allowedOrigins": [],
"xfo": "DENY",
"expectedAllowed": false
}
],
"allAncestorsChecked": true,
"defaultSrcFallback": false,
"metaEnforcesFrameAncestors": false,
"actualHeaders": false
},
"messageSchema": {
"keys": [
"kind",
"version",
"requestId",
"title"
],
"kind": "book-title",
"version": 1,
"maxTitle": 80
},
"messageRows": [
{
"case": "normal",
"origin": "https://preview.example.org",
"sourceReference": "preview-A",
"targetOrigin": "https://atlas.example.org",
"data": {
"kind": "book-title",
"version": 1,
"requestId": "read-7",
"title": "Tea & Bread"
},
"expected": true
},
{
"case": "stale-message",
"origin": "https://preview.example.org",
"sourceReference": "preview-A",
"targetOrigin": "https://atlas.example.org",
"data": {
"kind": "book-title",
"version": 1,
"requestId": "read-6",
"title": "Tea & Bread"
},
"expected": false
},
{
"case": "wrong-reference",
"origin": "https://preview.example.org",
"sourceReference": "preview-B",
"targetOrigin": "https://atlas.example.org",
"data": {
"kind": "book-title",
"version": 1,
"requestId": "read-7",
"title": "Tea & Bread"
},
"expected": false
},
{
"case": "wrong-origin",
"origin": "https://reader.example.net",
"sourceReference": "preview-A",
"targetOrigin": "https://atlas.example.org",
"data": {
"kind": "book-title",
"version": 1,
"requestId": "read-7",
"title": "Tea & Bread"
},
"expected": false
},
{
"case": "shape-denied",
"origin": "https://preview.example.org",
"sourceReference": "preview-A",
"targetOrigin": "https://atlas.example.org",
"data": {
"kind": "book-title",
"version": 1,
"requestId": "read-7",
"title": null
},
"expected": false
}
],
"boundaries": {
"corsExposureGrantsAction": false,
"framePolicyGrantsRead": false,
"originMatchProvesSchema": false,
"clonedDataTrusted": false,
"messageAcceptedPermitsHTML": false
}
}- corsRows
- Browser exposure ile server read permission ayrı sonuçlardır.
- framing
- Response-owned ancestors/XFO matrix’i selected destek profile’ı kullanır.
- messageSchema
- Closed harmless title reply’nin expected fields/types sınırı.
- messageRows
- Event identity aliases, target ve pending transaction ayrı değerlendirilir.
- profile
- Reserved example origins ve no-actual-execution scope.
Typed inert rows; sourceReference gerçek WindowProxy değildir. CORS, CSP/XFO veya browser postMessage çalıştırılmaz.
İki yanlış kanı
CORS response’u engellediyse server request’i hiç görmedi.
Simple normal request server’a ulaşmış olabilir; script exposure ayrı kontrol edilir.
event.origin doğruysa message güvenle kullanılabilir.
Expected source reference, schema ve pending transaction ayrıca doğrulanır; output text olarak kalır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Reply origin ve sourceReference eşleşiyor, fakat requestId=read-6; beklenen read-7. Title kabul edilir mi?
- Hayır. stale-message için expected=false.
- Evet. Origin doğruysa bütün title message’ları kabul edilir.
Gerekçeli cevabı oku
Hayır. stale-message için expected=false. — Doğru origin/source eski reply’ı güncel yapmaz. Pending requestId de eşleşmelidir.
XFO DENY iki satırda da var. Supporting browser profilinde owned-chain neden izinli, report-only neden ret?
Dersten seçilen artifact alanları; öğretim örneği
- framing.rows[0]
- {"case":"owned-chain","ancestors":["https://atlas.example.org","https://atlas.example.org"],"cspDelivery":"header","cspDisposition":"enforce","allowedOrigins":["https://atlas.example.org"],"xfo":"DENY","expectedAllowed":true}
- framing.rows[3]
- {"case":"report-only","ancestors":["https://atlas.example.org"],"cspDelivery":"header","cspDisposition":"report","allowedOrigins":[],"xfo":"DENY","expectedAllowed":false}
- framing.allAncestorsChecked
- true
- Immediate parent izinliyse bütün ancestor’lar ve XFO da otomatik geçer.
- Enforced frame-ancestors XFO’yu override eder; report-only etmez.
Gerekçeli cevabı oku
Enforced frame-ancestors XFO’yu override eder; report-only etmez. — Owned chain bütün ancestor’ları izin listesinde bulur. Supporting browser’da enforced header önceliklidir. Report-only satırında XFO DENY uygulanır.
include mode’da wildcard ACAO exposure’ı reddediyor. Bu sonuç ile framing ve kabul edilen postMessage neden server action izni değildir?
Gerekçeli cevabı oku
CORS response’un script’e açılıp açılmayacağını belirler; server action izni değildir. Frame policy hangi ancestor’ların embed edebileceğini sınırlar, DOM read izni vermez. Message için exact origin/source, schema ve pending transaction kontrol edilir. Kabul edilen title yine data’dır; HTML yorumlama veya API resource izni sağlamaz. Bu tablolar gerçek browser enforcement değil, tanımlı koşulların sonuçlarıdır.
□ CORS, framing ve message kontrollerini ayrı anlattım.
□ Browser sonucunu server action veya HTML sink izni saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- MDN — CORS configurationRequests with credentials; Preflight requests and credentials; Credentialed requests/wildcards · Access-Control-Allow-Origin: explicit single origin and Vary: Origin
- W3C CSP Level 3 — Working Draft 16 September 2026§6.4.2 frame-ancestors; all ancestors, no meta/default-src fallback; §6.4.2.2 XFO precedence
- MDN — X-Frame-OptionsDirectives DENY/SAMEORIGIN/all ancestors; obsolete ALLOW-FROM; header not meta
- RFC 7034 — legacy informational XFO§2.1 DENY/SAMEORIGIN and documented historical implementation variations; not current ALLOW-FROM recommendation
- WHATWG HTML — cross-document messaging§9.3.2.1 expected origin/data validation; §9.3.3 queued task/targetOrigin/source/structured clone · §9.4.1 channel messages and transferred port capability distinction
- MDN — Window postMessageParameters targetOrigin/transfer; Dispatched event origin-at-send/source; Security concerns exact origin/source/data shape
- WHATWG Fetch Living Standard — official fetch.bs sourceCORS check algorithm (#cors-check), source lines 6553–6581: credentials-mode include, byte-serialized origin and ACAC true · HTTP fetch CORS response-tainting check, source lines 5312–5321: response network error on failed CORS check