Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-11.01

Origin ve Same-Origin Policy

Atlas ile kitap preview document’i aynı ekranda bulunabilir; bu, birbirlerinin DOM’unu okuyabilecekleri anlamına gelmez.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Aynı origin

  1. İki document hazır

    İki document önceden yüklenmiştir; bu scene network gönderimi değil browser-local DOM read gate’idir.

    Atlas document
    Read gate pending; atlas
    Preview document
    Yüklü readonly preview; atlas-other-path
  2. Identity seç

    Atlas seçili document origin kimliklerini karşılaştırmaya hazırlar; path veya serialized null tek başına identity değildir.

    Atlas document
    Identity comparison ready; atlas / atlas-other-path
    Preview document
    Yüklü readonly preview; atlas-other-path
  3. Origin gate

    Normal tuple veya opaque identity eşitliği browser-local selected predicate ile değerlendirildi; preview state’i değişmez.

    Atlas document
    Same-origin gate allow
    Preview document
    Yüklü readonly preview; atlas-other-path
  4. Read sonucu

    Readonly sample, bu origin kontrolüne göre erişilebilir. Bu sonuç server authorization veya çalıştırılmış DOM erişimi değildir.

    Atlas document
    Declared sample: Atlas Notları
    Preview document
    Yüklü readonly preview; atlas-other-path

Host farklı

  1. İki document hazır

    İki document önceden yüklenmiştir; bu scene network gönderimi değil browser-local DOM read gate’idir.

    Atlas document
    Read gate pending; atlas
    Preview document
    Yüklü readonly preview; preview
  2. Identity seç

    Atlas seçili document origin kimliklerini karşılaştırmaya hazırlar; path veya serialized null tek başına identity değildir.

    Atlas document
    Identity comparison ready; atlas / preview
    Preview document
    Yüklü readonly preview; preview
  3. Origin gate

    Normal tuple veya opaque identity eşitliği browser-local selected predicate ile değerlendirildi; preview state’i değişmez.

    Atlas document
    Same-origin gate deny
    Preview document
    Yüklü readonly preview; preview
  4. Read sonucu

    Readonly sample, bu origin kontrolüne göre açılamaz. Bu sonuç server authorization veya çalıştırılmış DOM erişimi değildir.

    Atlas document
    No DOM sample exposed; no network
    Preview document
    Yüklü readonly preview; preview

İki opaque

  1. İki document hazır

    İki document önceden yüklenmiştir; bu scene network gönderimi değil browser-local DOM read gate’idir.

    Atlas document
    Read gate pending; opaque-A
    Preview document
    Yüklü readonly preview; opaque-B
  2. Identity seç

    Atlas seçili document origin kimliklerini karşılaştırmaya hazırlar; path veya serialized null tek başına identity değildir.

    Atlas document
    Identity comparison ready; opaque-A / opaque-B
    Preview document
    Yüklü readonly preview; opaque-B
  3. Origin gate

    Normal tuple veya opaque identity eşitliği browser-local selected predicate ile değerlendirildi; preview state’i değişmez.

    Atlas document
    Same-origin gate deny
    Preview document
    Yüklü readonly preview; opaque-B
  4. Read sonucu

    Readonly sample, bu origin kontrolüne göre açılamaz. Bu sonuç server authorization veya çalıştırılmış DOM erişimi değildir.

    Atlas document
    No DOM sample exposed; no network
    Preview document
    Yüklü readonly preview; opaque-B

ROLLER · STATE · VERİ AKIŞI

Browser hangi yetkiyi ayırır?

Browser yalnız uzak server’a HTTP gönderen bir araç değildir. Birkaç uygulamanın script, document, storage ve credential bağlamını aynı kullanıcı oturumunda çalıştırır; bir uygulamanın başka uygulamanın verisini doğrudan okuyabilmesini sınırlaması gerekir. Origin bu client-side yetki sınırının temel kimliğidir. Atlas document’i ile bir preview document’i arasındaki DOM read kararı browser tarafındadır; Notes API’deki kullanıcı/tenant kararı ise server tarafında kalır. Aynı kişi iki sayfayı açtı diye document’ler aynı authority’yi kazanmaz.

HTTP(S) origin’i scheme, normalized host ve port ile karşılaştırırız; path, query ve fragment bu sınırı değiştirmez. https://atlas.example.org:443/ ile https://atlas.example.org/ aynı normalized origin’dir. :8443 veya preview.example.org farklı origin’dir. Aynı registrable domain altında olmak “same site” ilişkisi kurabilir ama same-origin yapmaz. HTML tuple’ında legacy domain alanı da vardır; burada document.domain relaxation kullanılmaz. IP adresinin veya backend işletmecisinin aynı olması da browser origin eşitliği sağlamaz.

Her origin bir URL string’i değildir

Opaque origin, string’den yeniden üretilemeyen internal identity taşır. Ayrı opaque-A ve opaque-B ikisi de null serialize edilir, fakat aynı origin değildir; opaque-A kendisiyle karşılaştırıldığında aynıdır. Bu nedenle log’da veya event.origin’da görülen null, ortak bir güvenilir origin adı sayılmaz. Sandboxed origin flag, URL’si Atlas’a benzeyen document’i opaque yapabilir. URL.origin görünümünden bütün document origin koşullarını çıkarmak doğru değildir; document oluşturma ve sandbox bağlamı da önemlidir.

about:blank için creator origin’in miras alınması gibi bağlamlar, yalnız URL’nin yazısına bakmanın yetmediğini gösterir. data: document’ler opaque olabilir; file: origin davranışı implementation-dependent olduğundan “aynı klasör her browser’da aynı origin” denmez. Artifact ordinary HTTP tuple örneklerini ve açıkça deklaratif opaque identity’leri ayırır. Scene önceden yüklenmiş iki document’in salt okunur DOM sample gate’ini gösterir; gerçek window, sandbox, network veya browser exception çalıştırmaz.

Read, send ve embed ayrı kararlar

SOP cross-origin DOM ve storage okumalarını sınırlar; bütün cross-origin network’ü durduran firewall değildir. Link/navigation, bazı normal request’ler ve embedding kendi kurallarıyla gerçekleşebilir. Bir görselin iframe yanında görünmesi onun document’inin DOM’unu açmaz; image/canvas okunabilirliği de ayrı koşullar taşır. CORS-mode fetch’te request server’a ulaşmışken response script’e açılmayabilir. no-cors opaque response da script’in normal body okumasını sağlamaz. “Gönderildi” ile “okunabildi” arasında bu yüzden ayrı kanıt gerekir.

Embedding’in de koşulları vardır: response framing policy’si, MIME, CSP, sandbox veya COEP/CORP seçili bağlamda engel olabilir. Kategoriler genel davranışı anlatır, tüm embed’lerin koşulsuz başarılı olduğu iddiası değildir. Browser read gate’inin olumlu olması server’da bir action’ın authorized olduğu anlamına gelmez; aynı origin içindeki session ve object policy yine önemlidir. Dersin tablosunda yalnız normal readonly preview ve catalog request’leri bulunur; server-side mutation veya üçüncü hedef isteği yoktur.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Tuple boundary

  1. Path ve default port origin’den ayrıldı

    https://atlas.example.org/books ile uppercase host ve explicit port 443 taşıyan preview URL aynı normalized origin’i seçer. Path, query ve fragment tuple’a katılmaz. Raw URL string equality, origin comparison değildir.

    Origin/operation facts
    Atlas default443 / paths differ / same origin
    Identity comparison
    Operation gate bekliyor
    Data/permission boundary
    Verdict yok
  2. Nondefault port ve cross-host ayrı kimlik oldu

    Port 8443 origin https://atlas.example.org:8443 olur; preview.example.org da başka host’tur. Domain suffix benzerliği veya aynı işletme, tuple equality yerine geçmez. Default normalization her port’u eşit yapmaz.

    Origin/operation facts
    Atlas default443 / paths differ / same origin
    Identity comparison
    Nondefault8443 / preview host cross-origin
    Data/permission boundary
    Verdict yok
  3. Same-origin DOM read user grant’i olmadı

    Same-origin readonly DOM sample scriptReadable true verir; serverActionAuthorized not evaluated’dır. Browser local read gate’i object permission veya safe output policy’yi hesaplamaz. Sample public declared text olarak kalır.

    Origin/operation facts
    Atlas default443 / paths differ / same origin
    Identity comparison
    Nondefault8443 / preview host cross-origin
    Data/permission boundary
    Origin read allowed / server policy not evaluated
  4. Cross-origin send ile read farklı facts oldu

    Seçilmiş cross-origin readonly GET sent true fakat scriptReadable false’tur. Server request receipt’i SOP’un bozuk olduğunu göstermez. Network request gönderebilmek response body’yi script’e açmakla aynı operation değildir.

    Origin/operation facts
    Cross-origin GET sent / script read false
    Identity comparison
    Nondefault8443 / preview host cross-origin
    Data/permission boundary
    Origin read allowed / server policy not evaluated
  5. Embed direct DOM read yerine geçmedi

    Framing allowed public preview sent ve embedded true verir, scriptReadable false kalır. Frame görünümü başka origin DOM’unu doğrudan okuyabildiğin anlamına gelmez. Embedding policy ve DOM isolation ayrı gates’tir.

    Origin/operation facts
    Cross-origin GET sent / script read false
    Identity comparison
    Embed true / direct script read false
    Data/permission boundary
    Origin read allowed / server policy not evaluated
  6. Control operation-specific boundary’de kaldı

    Trusted identity comparison structured tuple’a dayanır; site veya DNS address browser DOM gate’ine ek permission vermez. Server action policy SOP’tan bağımsızdır. Bu declarative matrix gerçek network veya browser enforcement ölçmez.

    Origin/operation facts
    Cross-origin GET sent / script read false
    Identity comparison
    Embed true / direct script read false
    Data/permission boundary
    Separate send/embed/read/server-policy decisions

Opaque identity

  1. Aynı null display iki identity olarak tutuldu

    opaque-A ve opaque-B serialized null taşır, fakat identityAlias farklıdır. Display string eşitliği opaque internal identity equality değildir. Bu teaching aliases gerçek browser internal origin handles değildir.

    Origin/operation facts
    Both serialize null / distinct aliases A,B
    Identity comparison
    Operation gate bekliyor
    Data/permission boundary
    Verdict yok
  2. Comparison actual identity alias’ıyla sınırlandı

    Opaque-A ile opaque-B expected false, opaque-A self expected true’dur. Null metnini tek common origin yapmak separated contexts’i yanlış birleştirir. Opaque boundary tuple origin gibi hostname’den türetilmez.

    Origin/operation facts
    Both serialize null / distinct aliases A,B
    Identity comparison
    A≠B / A=self / no null-based merge
    Data/permission boundary
    Verdict yok
  3. Unknown document context URL’den tahmin edilmedi

    Sandboxed origin flag HTTP URL’ye rağmen opaque identity seçebilir. URL string’i tek başına Document’ın gerçek origin’ini belirlemek için yeterli değildir. Creation ve sandbox context bilinmeden DOM read grant’i üretilmez.

    Origin/operation facts
    Both serialize null / distinct aliases A,B
    Identity comparison
    A≠B / A=self / no null-based merge
    Data/permission boundary
    HTTP URL alone insufficient for Document origin
  4. Creator-inherited context ayrı qualification taşıdı

    about:blank seçilmiş creation context’inde creator origin’i inherit eder. file URL implementation-dependent ve not simulated’dır. Normal HTTP URL parser sonucunu bu contexts’e aynı kuralla genellemek doğru değildir.

    Origin/operation facts
    Creation context matters / file not simulated
    Identity comparison
    A≠B / A=self / no null-based merge
    Data/permission boundary
    HTTP URL alone insufficient for Document origin
  5. Read gate identity source’uyla birlikte kontrol edildi

    Identity kind tuple veya opaque olarak açık tutulur; missing creation facts’e guessed tuple atanmaz. Legacy document.domain relaxation bu profile’da false’tur. Dar messaging contract’ı başka lesson’ın ayrı control’üdür.

    Origin/operation facts
    Creation context matters / file not simulated
    Identity comparison
    Identity kind/source retained / no guessed relaxation
    Data/permission boundary
    HTTP URL alone insufficient for Document origin
  6. Opaque review general browser proof olmadı

    Bu normal aliases üzerinden yanlış equality varsayımı açıklanır. Storage, canvas, sandbox runtime veya gerçek DOM read çalıştırılmaz. Correct model identity sonucu gerçek browser uyumluluğu veya user authorization kanıtı değildir.

    Origin/operation facts
    Creation context matters / file not simulated
    Identity comparison
    Identity kind/source retained / no guessed relaxation
    Data/permission boundary
    Opaque model correct / browser enforcement unmeasured

VARSAYIM · SINIR · KONTROL

Yanlış eşitlik hangi veriyi açar?

Atlas ile preview.example.org aynı işletmeye ait olabilir; browser’a göre host farklıdır. Domain suffix’i benziyor diye DOM sample’ı açan application helper, kendi trust kararını browser origin modelinden daha geniş kurmuştur. Gerekli koşul, başka origin’in verisinin read permission olmadan application’a taşınmasıdır; aynı ekran veya aynı DNS IP bu koşulu meşrulaştırmaz. Etki hangi document veya storage verisinin geçtiğine bağlıdır. Bu ders böyle bir davranışı üretmez; policy tablosundaki yanlış eşitlik varsayımını tartışır.

Opaque-A ve opaque-B için serialized null eşitliği gerçek identity eşitliği yerine konursa birbirinden ayrılmış context’ler birleşmiş gibi görünür. Opaque branch’i bunun tersini korur: display string aynı olsa da gate deny’dir. Benzer şekilde port’u görmezden gelmek :443 ile :8443’ü birleştirir. Origin modeli bir string prefix kontrolüne indirgenmez; normalized tuple veya internal opaque identity taşımalıdır. Placeholder identity alias’ları browser’ın gerçek internal origin handle’ı değildir, yalnız bu ayrımı görünür kılar.

Request receipt neyi kanıtlar?

Bir normal cross-origin GET’in server’a ulaşması, SOP’un bozuk olduğunu kanıtlamaz. Server response gönderdiği halde script body’ye erişemeyebilir; embed görünürken direct DOM read deny olabilir. Kontrol etkisini doğru adlandırmak için sent, embedded, script-readable ve server-authorized alanlarını ayrı tutarız. Read isolation’ı request authorization sanan tasarım, browser’ın korumadığı server-side gate’i atlar. CSRF veya access control için SOP’un varlığı tek başına olumlu kanıt değildir.

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

Hareket olmadan bütün senaryoları oku

Operation matrix

  1. Normalized origins source URL’leriyle eşleştirildi

    Dört HTTP URL’nin scheme/host/port bilgisi ayrı tutulur. Bu defter normalized default port’u null olarak temsil eder; native URL.port getter’ı default port için boş string verir. İki gösterim de HTTPS’nin port kullanmadığı anlamına gelmez. Atlas other-path same-origin, preview host cross-origin’dir.

    Origin matrix
    HTTP tuples normalized / ports retained
    Operation/coverage review
    Operation gate bekliyor
    Evidence verdict
    Verdict yok
  2. Read positive ve negative controls aynı rule’ı sınadı

    Atlas other-path expected true, Atlas→preview false’tur. Opaque-A/B false ve self true ayrı controls’dür. Header veya DNS observation bu declared identity comparisons yerine konmaz.

    Origin matrix
    HTTP tuples normalized / ports retained
    Operation/coverage review
    Same tuple true / cross host and opaque pair false
    Evidence verdict
    Verdict yok
  3. Send/embed/read alanları yan yana tutuldu

    Same-origin sample sent false çünkü already loaded’dır. Cross-origin GET sent true/read false; preview embed true/read false’tur. Bu facts farklı operations’ı tanımlar; sent false tek başına network refusal değildir.

    Origin matrix
    Loaded sample / sent GET / embedded preview distinct
    Operation/coverage review
    Same tuple true / cross host and opaque pair false
    Evidence verdict
    Verdict yok
  4. Server action policy başka owner’da tutuldu

    Public read branch’leri yalnız seçilen public read işlemini kapsar. Same-origin sample server action not evaluated’dır. Browser read isolation’ı server request authorization veya CSRF protection kanıtı diye sunmak yanlış inference’dır.

    Origin matrix
    Loaded sample / sent GET / embedded preview distinct
    Operation/coverage review
    Browser gate ≠ server action authorization
    Evidence verdict
    Verdict yok
  5. Policy matrix actual network capture olmadı

    profile actualBrowser ve actualNetwork false’tur. Native URL parsing tuple örneklerini hesaplayabilir; browser SOP, credential gönderimi veya embedding policy’yi uygulamaz. Field source ve model scope birlikte tutulur.

    Origin matrix
    Loaded sample / sent GET / embedded preview distinct
    Operation/coverage review
    Browser gate ≠ server action authorization
    Evidence verdict
    Declared operation outcomes / network unmeasured
  6. Regression aynı-operation comparison’a bağlandı

    Current document identity, operation kind ve expected boundary aynı scope’ta yeniden kontrol edilir. Cookie domain/path/site kuralları DOM origin tuple’ına zorlanmaz. Minimal origin/operation evidence private content gerektirmez.

    Origin matrix
    Loaded sample / sent GET / embedded preview distinct
    Operation/coverage review
    Browser gate ≠ server action authorization
    Evidence verdict
    Recheck identity kind + operation + boundary

Context gap

  1. URL source document creation source’undan ayrıldı

    Origin matrix’i yerel URL/identity defteridir. HTTP tuple, document creation bağlamı ve read operation ayrı girdilerdir; opaque alias gerçek Browser handle’ı değildir. Gerçek incelemede server receipt’i send’i, browser-local gate ise script read’i yanıtlar; bu tabloda ikisi yalnız declared sonuçtur ve loaded preview state’i yeni request üretmez. Alternatif review yalnız HTTP URL string’ini görür; creator veya sandbox state’i yoktur. Normal URL-derived tuple profile’ı Document’ın gerçek context’ine otomatik uygulanamaz. Opaque possibility coverage gerektirir.

    Origin matrix
    URL known / creation-sandbox context missing
    Operation/coverage review
    Operation gate bekliyor
    Evidence verdict
    Verdict yok
  2. Parser result Document origin proof olmadı

    URL origin getter’ı HTTP URL’yi normalleştirir; sandbox flag veya inherited about:blank identity’yi gözlemez. Parser çıktısını Document’ın gerçek read gate’iyle eşitlemek yapılmayan kontrolü yapılmış sayar.

    Origin matrix
    URL known / creation-sandbox context missing
    Operation/coverage review
    URL getter ≠ full Document-origin observation
    Evidence verdict
    Verdict yok
  3. Missing read observation deny diye yazılmadı

    Read outcome observation’ı da bulunmaz. Normal matrix’in scriptReadable true/false values’ı bu eksik context’e taşınmaz. Absent event ile observed browser exception farklı evidence’dır.

    Origin matrix
    Read outcome unobserved / no guessed deny
    Operation/coverage review
    URL getter ≠ full Document-origin observation
    Evidence verdict
    Verdict yok
  4. Required facts identity ve operation’a ayrıldı

    Current document origin kind, creation/sandbox context ve operation gerekir. Server receipt varsa yalnız send evidence olabilir; DOM read outcome için başka observation gerekir. Tek log row bütün gates’i kapatmaz.

    Origin matrix
    Read outcome unobserved / no guessed deny
    Operation/coverage review
    Need document identity source and read outcome
    Evidence verdict
    Verdict yok
  5. Actual origin/read verdict unknown kaldı

    Bu review’de Document origin ve script-read result UNKNOWN kalır. Model’de normal HTTP tuple’ın hesaplanabilmesi unknown sandbox context’i tamamlamaz. Missing evidence browser compromise veya successful isolation kanıtı değildir.

    Origin matrix
    Read outcome unobserved / no guessed deny
    Operation/coverage review
    Need document identity source and read outcome
    Evidence verdict
    UNKNOWN: actual Document origin/read outcome
  6. Yeni evidence scope’u browser question’a bağlandı

    İlerlemek için controlled document creation facts ve scoped read observation gerekir. Full page data veya credentials şart değildir. Server permission sorusu için ayrı server-side evidence alınmalıdır; SOP review ile karıştırılmaz.

    Origin matrix
    Read outcome unobserved / no guessed deny
    Operation/coverage review
    Need document identity source and read outcome
    Evidence verdict
    Collect scoped creation/read facts; authz separately

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

Boundary’yi document ve operation ile kaydet

Origin matrix’i yerel URL/identity defteridir. HTTP tuple, document creation bağlamı ve read operation ayrı girdilerdir; opaque alias gerçek Browser handle’ı değildir. Gerçek incelemede server receipt’i send’i, browser-local gate ise script read’i yanıtlar; bu tabloda ikisi yalnız declared sonuçtur ve loaded preview state’i yeni request üretmez. Atlas’ın origin tablosu ordinary HTTP URL’lerini normalized scheme/host/port ile saklar; opaque context’ler ayrı identity alias’ları taşır. Same-site bilgisini cookie policy bağlamında kullanabiliriz, fakat DOM read gate’ine geçirmeyiz. Path değişiminin origin’i değiştirmediğini, default port’un normalize edildiğini ve explicit nondefault port’un fark yarattığını kontrol ederiz. Legacy document.domain setter yerine ihtiyaç duyulan cross-document iş için dar bir messaging sözleşmesi tasarlamak, uygulamaların güven sınırlarını görünür bırakır.

Review matrisi yalnız allow sonuçlarını toplamaz. Same-origin readonly DOM sample olumlu kontrol; cross-host ve ayrı opaque identity olumsuz kontrollerdir. Her scene’de preview’in kendi state’i sabit kalır; Atlas’ın browser-local read kararı değişir ve hiçbir HTTP transfer çizilmez. Aynı-origin allow da data sample’ın safe rendering veya user authorization koşullarını çözmez; yalnız seçili origin gate’inin sonucudur. Bir gerçek browser harness eklenirse window/iframe origin’i, document creation ve browser exception ayrı ölçülmelidir.

Network ve exposure kanıtı

Network davranışını araştırırken request receipt ve script exposure kanıtını farklı yerlerden al: server normal request’i görür, browser response gate’ini uygular. Cookie kapsamı ve storage origin ilişkileri de tek tabloya zorlanmaz; cookie domain/path/site kuralları DOM origin tuple’ından farklıdır. Bu ayrımlar local fixture’da source/path ve predicate kontrolüdür. Browser process isolation, gerçek storage, canvas, credential gönderimi veya embedding policy uygulanmış sayılmaz; hepsi kendi API ve profile testi ister.

ŞİMDİ VAKAYA UYGULA

Origin identity ile send, embed, script-read ve server policy nasıl ayrılır?

Atlas’ın farklı path’leri ve açıkça yazılan default port’u aynı origin’e ait. Preview host’u ve port 8443 ise farklı origin oluşturuyor. İki opaque origin ekranda null görünse bile aynı kimliği taşımıyor. Bu örneklerde request gönderme, embed ve script’in veriyi okuması için verilen izinleri ayrı değerlendireceğiz.

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

Atlas origin ve operation matrisi

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

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "httpOnlyTupleExamples": true,
    "legacyDocumentDomainRelaxation": false,
    "actualBrowser": false,
    "actualNetwork": false,
    "domSample": "Atlas Notları · readonly declared text"
  },
  "httpOrigins": [
    {
      "url": "https://atlas.example.org/books?view=one#title",
      "origin": "https://atlas.example.org",
      "scheme": "https",
      "host": "atlas.example.org",
      "port": null
    },
    {
      "url": "https://ATLAS.example.org:443/preview",
      "origin": "https://atlas.example.org",
      "scheme": "https",
      "host": "atlas.example.org",
      "port": null
    },
    {
      "url": "https://atlas.example.org:8443/preview",
      "origin": "https://atlas.example.org:8443",
      "scheme": "https",
      "host": "atlas.example.org",
      "port": 8443
    },
    {
      "url": "https://preview.example.org/books",
      "origin": "https://preview.example.org",
      "scheme": "https",
      "host": "preview.example.org",
      "port": null
    }
  ],
  "identities": {
    "atlas": {
      "kind": "tuple",
      "scheme": "https",
      "host": "atlas.example.org",
      "port": null
    },
    "atlas-other-path": {
      "kind": "tuple",
      "scheme": "https",
      "host": "atlas.example.org",
      "port": null
    },
    "preview": {
      "kind": "tuple",
      "scheme": "https",
      "host": "preview.example.org",
      "port": null
    },
    "opaque-A": {
      "kind": "opaque",
      "identityAlias": "opaque-A",
      "serialized": "null"
    },
    "opaque-B": {
      "kind": "opaque",
      "identityAlias": "opaque-B",
      "serialized": "null"
    }
  },
  "comparisons": [
    {
      "case": "normal",
      "from": "atlas",
      "to": "atlas-other-path",
      "expected": true
    },
    {
      "case": "cross-origin",
      "from": "atlas",
      "to": "preview",
      "expected": false
    },
    {
      "case": "opaque",
      "from": "opaque-A",
      "to": "opaque-B",
      "expected": false
    },
    {
      "case": "opaque-self",
      "from": "opaque-A",
      "to": "opaque-A",
      "expected": true
    }
  ],
  "operations": [
    {
      "kind": "same-origin DOM sample",
      "sent": false,
      "embedded": "already loaded",
      "scriptReadable": true,
      "serverActionAuthorized": "not evaluated"
    },
    {
      "kind": "selected cross-origin readonly GET, no CORS sharing",
      "sent": true,
      "embedded": false,
      "scriptReadable": false,
      "serverActionAuthorized": "selected public read only"
    },
    {
      "kind": "selected cross-origin preview embed, framing allowed",
      "sent": true,
      "embedded": true,
      "scriptReadable": false,
      "serverActionAuthorized": "selected public read only"
    }
  ],
  "documentContexts": [
    {
      "context": "normal HTTP document",
      "identity": "URL-derived tuple in selected profile"
    },
    {
      "context": "creator-inherited about:blank",
      "identity": "creator origin under selected creation context"
    },
    {
      "context": "sandboxed origin flag",
      "identity": "opaque identity despite HTTP URL"
    },
    {
      "context": "file URL",
      "identity": "implementation-dependent; not simulated"
    }
  ]
}
httpOrigins
HTTP URL parsing örnekleri; Document origin kurallarının tümü değildir.
identities
Normalized tuple veya opaque internal identity alias’ı.
comparisons
Serialized null eşitliğinden bağımsız identity sonucu.
operations
Send/embed/read/server policy ayrı kategorilerdir.
documentContexts
Creation ve sandbox bağlamı URL string’inden fazladır.

Salt okunur declarative DOM/origin modeli; normal HTTP URL parser kontrolü browser SOP kanıtı değildir. Browser, storage, canvas, sandbox veya network çalışmaz.

İki yanlış kanı

İki opaque origin null görünüyorsa aynıdır.

Serialization identity değildir; iki farklı opaque origin aynı string’i üretebilir.

SOP cross-origin request’i server’a hiç göndermez.

Read isolation ile send/embed farklıdır; normal request gidip response script’e açılmayabilir.

SIRA SENDE

Bu hikâyeyi sen çöz.

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

Cross-origin preview iframe yüklendi. Parent script frame’in DOM’unu otomatik olarak okuyabilir mi?

  1. Hayır. embed=true, fakat scriptReadable=false.
  2. Evet. iframe yüklendiyse bütün DOM erişimi serbesttir.
Gerekçeli cevabı oku

Hayır. embed=true, fakat scriptReadable=false. — SOP, cross-origin script erişimini sınırlar. Frame’in yüklenmesi veya embed edilmesi bu okuma iznini sağlamaz.

Read-only cross-origin GET için sent=true, fakat scriptReadable=false. Bu bir network firewall sonucu mudur?

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

operations[1]
{"kind":"selected cross-origin readonly GET, no CORS sharing","sent":true,"embedded":false,"scriptReadable":false,"serverActionAuthorized":"selected public read only"}
  1. Evet. Script okuyamıyorsa request server’a hiç gidemez.
  2. Hayır. Request gönderilmiş; script okuyamıyor.
Gerekçeli cevabı oku

Hayır. Request gönderilmiş; script okuyamıyor. — SOP/CORS, response’un script tarafından okunmasını sınırlar. Server’ın public-read kararı ve request’in gönderilmiş olması ayrı sonuçlardır.

HTTP URL’si olan sandboxed document neden opaque origin taşıyabilir? about:blank için hangi context gerekir?

Gerekçeli cevabı oku

Sandboxed origin flag, tuple origin yerine opaque identity oluşturabilir; URL host’unun eşleşmesi bunu kaldırmaz. about:blank, nasıl oluşturulduğuna bağlı olarak creator origin’ini miras alabilir. Her about:blank için aynı origin varsayılamaz. File origin davranışı ise implementation’a bağlıdır.

□ URL tuple ile document’ın origin context’ini ayırdım.

□ Opaque ve inherited origin sonuçlarının koşullarını belirttim.

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

Kaynaklar ve kapsam

  • WHATWG HTML — Origins and sandboxing§7.1.1 Origins: tuple/opaque, serialization, same-origin equality · §7.1.1.1 Sites; §7.1.1.2 Relaxing the same-origin restriction · §7.1.5 Sandboxing: sandboxed origin and scripts flags
  • MDN — Same-origin policyDefinition of an origin; Inherited origins; File origins · Cross-origin network access: writes, embeds, reads · Cross-origin script API access: Window and Location · Cross-origin data storage access
  • WHATWG Fetch — CORS protocol and algorithms§2.2.1 CORS-safelisted method; §2.2.2 CORS-safelisted request-header · §3.3.2 HTTP requests; §3.3.3 HTTP responses · §3.3.5 CORS protocol and credentials · §4.8 CORS-preflight fetch; §4.9 CORS-preflight cache; §4.10 CORS check