Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-11.S02

CORS, framing ve cross-window message validation

Response exposure, embedding ve Window reply neden farklı approval kararlarıdır?

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Valid message

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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=*
  5. 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=*
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. Üç 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. Üç 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
  4. 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
  5. Ş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
  6. İ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?

  1. Hayır. stale-message için expected=false.
  2. 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
  1. Immediate parent izinliyse bütün ancestor’lar ve XFO da otomatik geçer.
  2. 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