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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Aynı origin
- İ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
- 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
- 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
- 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ı
- İ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
- 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
- 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
- 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
- İ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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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?
- Hayır. embed=true, fakat scriptReadable=false.
- 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"}
- Evet. Script okuyamıyorsa request server’a hiç gidemez.
- 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