WEB / WEB-06.02
Domain, site ve origin
Hostname, registrable domain, schemeful site ve origin’i aynı URL pair’i üzerinde ayır; browser boundary’sini application yetkisiyle karıştırma.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Subdomain
- Pair seçildi
Başlangıç https://app.example.com/catalog ile https://api.example.com/catalog karşılaştırılacaktır. URL pair’i hazırdır; origin ve site hesapları henüz yoktur.
- URL pair’i
- https://api.example.com/catalog
- Boundary hesabı
- Origins: pending
- Sonuç defteri
- Sonuç: pending
- Origin tuple’ları ayrılır
Değişen tuple component’i hostname app.example.com → api.example.com olur. Bu HTTP(S) origin karşılaştırması same-origin=false verir; path /catalog aynı kalsa da bu farklı component’i ortadan kaldırmaz.
- URL pair’i
- https://api.example.com/catalog
- Boundary hesabı
- Origin: https://api.example.com
- Sonuç defteri
- Same-origin: false
- Site ayrı hesaplanır
Selected domain fixture’da scheme ve registrable domain kullanılır; port kullanılmaz.
- URL pair’i
- https://api.example.com/catalog
- Boundary hesabı
- Site: https://example.com
- Sonuç defteri
- Same-site: true
- İki sonuç birlikte korunur
Sınıflandırma access izni veya network başarısı değildir.
- URL pair’i
- https://api.example.com/catalog
- Boundary hesabı
- Local calculation complete
- Sonuç defteri
- Same-origin: false; same-site: true
Port 8443
- Pair seçildi
Başlangıç https://app.example.com/catalog ile https://app.example.com:8443/catalog karşılaştırılacaktır. URL pair’i hazırdır; origin ve site hesapları henüz yoktur.
- URL pair’i
- https://app.example.com:8443/catalog
- Boundary hesabı
- Origins: pending
- Sonuç defteri
- Sonuç: pending
- Origin tuple’ları ayrılır
Değişen tuple component’i effective port 443 → 8443 olur. Bu HTTP(S) origin karşılaştırması same-origin=false verir; path /catalog aynı kalsa da bu farklı component’i ortadan kaldırmaz.
- URL pair’i
- https://app.example.com:8443/catalog
- Boundary hesabı
- Origin: https://app.example.com:8443
- Sonuç defteri
- Same-origin: false
- Site ayrı hesaplanır
Selected domain fixture’da scheme ve registrable domain kullanılır; port kullanılmaz.
- URL pair’i
- https://app.example.com:8443/catalog
- Boundary hesabı
- Site: https://example.com
- Sonuç defteri
- Same-site: true
- İki sonuç birlikte korunur
Sınıflandırma access izni veya network başarısı değildir.
- URL pair’i
- https://app.example.com:8443/catalog
- Boundary hesabı
- Local calculation complete
- Sonuç defteri
- Same-origin: false; same-site: true
HTTP scheme
- Pair seçildi
Başlangıç https://app.example.com/catalog ile http://app.example.com/catalog karşılaştırılacaktır. URL pair’i hazırdır; origin ve site hesapları henüz yoktur.
- URL pair’i
- http://app.example.com/catalog
- Boundary hesabı
- Origins: pending
- Sonuç defteri
- Sonuç: pending
- Origin tuple’ları ayrılır
Değişen tuple component’i scheme https → http olur. Bu HTTP(S) origin karşılaştırması same-origin=false verir; path /catalog aynı kalsa da bu farklı component’i ortadan kaldırmaz.
- URL pair’i
- http://app.example.com/catalog
- Boundary hesabı
- Origin: http://app.example.com
- Sonuç defteri
- Same-origin: false
- Site ayrı hesaplanır
Selected domain fixture’da scheme ve registrable domain kullanılır; port kullanılmaz.
- URL pair’i
- http://app.example.com/catalog
- Boundary hesabı
- Site: http://example.com
- Sonuç defteri
- Same-site: false
- İki sonuç birlikte korunur
Sınıflandırma access izni veya network başarısı değildir.
- URL pair’i
- http://app.example.com/catalog
- Boundary hesabı
- Local calculation complete
- Sonuç defteri
- Same-origin: false; same-site: false
Opaque identities
- İki identity supplied
opaque-A ile opaque-B, örnekte iki ayrı identity olarak tanımlanmıştır; gerçek Document oluşturulmaz.
- URL pair’i
- opaque-A / opaque-B
- Boundary hesabı
- Comparison: pending
- Sonuç defteri
- Sonuç: pending
- Serialization aynı görünür
İki ayrı opaque identity aynı null metnine serialize olur; bu metin identity’lerin eşit olduğu anlamına gelmez.
- URL pair’i
- Distinct identities
- Boundary hesabı
- null / null
- Sonuç defteri
- Identity verdict: pending
- Identity kuralı uygulanır
Ayrı opaque identity’ler same-origin değildir; serialized metinlerin eşit olması bu kararı değiştirmez.
- URL pair’i
- opaque-A ≠ opaque-B
- Boundary hesabı
- Identity equality: false
- Sonuç defteri
- Same-origin: false
- Model sınırı kaydedilir
Bu sonuç verilen identity örneğine aittir; browser’da Document oluşturulup origin ölçülmüş değildir.
- URL pair’i
- Fixture only
- Boundary hesabı
- Internal identities supplied
- Sonuç defteri
- Browser enforcement: not run
ROLLER · STATE · VERİ AKIŞI
Hostname hangi adı, domain hangi bölümü anlatır?
https://app.example.com/catalog adresinin hostname’i app.example.com’dur. app altındaki label, DNS adının yapısına aittir; domain sözcüğü tek başına hangi seviyeyi kastettiğini söylemez. Configuration incelemesinde full hostname, public suffix ve registrable domain’i ayrı adlandır.
Public suffix, normal kayıt sınırını belirleyen isimdir; com ve co.uk gibi farklı uzunluklarda olabilir. Registrable domain bu suffix’in önündeki uygun label ile oluşur. Bu yüzden “son iki label her zaman site’tır” algoritması doğru değildir. Public Suffix List bu sınırlar için kullanılan güncel veri kaynağıdır; domain ownership sertifikası değildir.
Artifact yalnız example.com/example.org altında seçilmiş normal host’lar kullanır. Burada com ve org public suffix, example.com ve example.org registrable domain fixture değeridir. Tam PSL, IDNA, IP veya bütün host türlerini yeniden uygulayan bir parser yazmıyoruz.
Origin, scheme/host/port sınırıdır
Normal HTTP(S) URL’lerde origin karşılaştırması scheme, host ve normalized port üzerinden yapılır. https://app.example.com/catalog ile https://app.example.com/notes?lang=en#new aynı origin’dedir: path, query ve fragment bu sınırı değiştirmez.
https://api.example.com farklı host’tur. https://app.example.com:8443 farklı non-default port’tur. http://app.example.com ise farklı scheme kullanır. Üçü de başlangıçtaki HTTPS default-port origin’den farklıdır; aynı ekip tarafından işletilmeleri bu browser sınırını birleştirmez.
Default port normalization’a dikkat et. https://app.example.com:443 serialization’da https://app.example.com origin’ine dönüşür. URL.origin getter’ı bu HTTP(S) örneklerinde karşılaştırılabilir serialization sağlar. Eşitlik raw adres string’lerinin eşitliğini gerektirmez.
Schemeful site daha geniş bir sınırdır
Bu HTTP(S) domain örneklerinde schemeful site, scheme ile registrable domain’i birlikte kullanır. https://app.example.com ve https://api.example.com için site https://example.com’dur. Host’lar farklı olduğundan same-origin değiller; aynı HTTPS registrable domain altında oldukları için same-site’tırlar.
Port site karşılaştırmasında yer almaz. https://app.example.com:8443, default-port HTTPS origin’den farklı olsa da aynı site içindedir. Scheme değişirse schemeful site değişir: http://app.example.com bu örnekte cross-site’tır.
Bu açıklama domain örneklerine aittir. Standardın registrable domain bulunmayan host’larda host fallback ve opaque origin kuralları vardır. Buradaki sınırlı domain hesabını bütün adres türleri için geçerli bir site API’si gibi kullanma.
Same-site, same-origin yetkisi vermez
Origin browser isolation için temel sınırdır; site ise örneğin SameSite cookie değerlendirmesinde kullanılan başka bir gruplamadır. Same-site iki uygulamanın birbirinin DOM’una veya response body’sine serbestçe erişebileceğini söylemez. Hangi operation’ın hangi browser policy’sine tabi olduğunu açıkça seç.
SOP, CORS ve cookie gönderim kuralları ayrı derslerde ayrıntılandırılır. Buradaki tablo yalnız same-origin/same-site sınıflandırmasını yapar. “Cross-origin” etiketi, bütün network iletişiminin yasak olduğu veya server’ın request’i kesin almadığı anlamına gelmez.
Server-side authentication ve resource authorization bu sınıflandırmadan bağımsızdır. api.example.com aynı site olsa da Atlas raporunu Duru’ya vermeden önce principal, tenant, action ve object relation policy’sini uygular. Browser sınırı object ownership kanıtı değildir.
Opaque origin’i "null" metnine indirgeme
Bütün origin’ler HTTP(S) tuple değildir. Opaque origin, kendi internal identity’si olan bir değerdir; serialization’ı null olabilir. Ayrı iki opaque origin’in aynı null metnine serialize olması, aynı internal origin olduklarını göstermez.
Artifact opaque-A ve opaque-B alias’larını iki ayrı identity fixture olarak ilan eder. İkisi için serializedOrigin null, identity comparison false’tur. Bu alias’lar gerçek browser Document origin’leri değildir; kuralı açıklayan inert modeldir.
Pratik sonuç: policy’yi serialized null değerini bir trusted origin adı sayarak kurma. Hangi embedding/sandbox/document context’in hangi identity’yi ürettiği önemlidir. Bu derste browser sandbox yaratılmaz veya boundary gevşetilmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Site / origin
- Güven sorusu doğru identity’yi seçti
Base https://app.example.com/catalog, api.example.com subdomain case’idir. Same-site aile bağlantısı aynı origin tuple’ı üretmez.
- Identity evidence
- app vs api / shared site
- Boundary comparison
- Boundary comparison yok
- Access conclusion
- Access claim yok
- Karşılaştırma kayıp bilgiyi taşıdı
API host’un origin’i https://api.example.com, site grubu ise https://example.com’dur. Base URL ile same-origin değildir, fakat same-site’tır. Bu iki sonuç farklı boundary sorularını yanıtlar.
- Identity evidence
- app vs api / shared site
- Boundary comparison
- Origin false / site true
- Access conclusion
- Access claim yok
- Application access sonucu eklenmedi
Boundary classification gerçek browser read-policy veya server authorization sonucu değildir. BrowserEnforcementExecuted=false olduğu için response readability veya user entitlement bilinmez.
- Identity evidence
- app vs api / shared site
- Boundary comparison
- Origin false / site true
- Access conclusion
- UNKNOWN: actual access
- Port ve scheme ayrı sebepler
Port 8443 origin’i değiştirir ama site’i değiştirmez. http scheme hem origin hem schemeful site’i değiştirir; aynı false/true pair’ini nedenini yazmadan raporlamak yeterli değildir.
- Identity evidence
- Host / port / scheme causes separate
- Boundary comparison
- Origin false / site true
- Access conclusion
- UNKNOWN: actual access
- Site fixture’ı evrensel PSL değildir
fixtureRegistrableDomains yalnız app/api.example.com ve app.example.org örneklerini tanımlar. Son iki label yöntemi bütün suffix veya localhost/IP/opaque context’lere genişletilmez.
- Identity evidence
- Host / port / scheme causes separate
- Boundary comparison
- Selected domain map / no universal shortcut
- Access conclusion
- UNKNOWN: actual access
- Control gereken sınırı korudu
Same-origin gereksinimi tam scheme/host/normalizedPort tuple’ıyla korunur. Same-site cookie veya server entitlement kontrolleri onun yerine geçirilmez.
- Identity evidence
- Host / port / scheme causes separate
- Boundary comparison
- Selected domain map / no universal shortcut
- Access conclusion
- Tuple boundary preserved / access unknown
Opaque identity
- Güven sorusu doğru identity’yi seçti
opaqueComparison opaque-A ve opaque-B farklı identity alias’larıdır; her ikisinin serialization’ı null metnidir. Aynı text, aynı origin identity anlamına gelmez.
- Identity evidence
- opaque-A ≠ opaque-B / both null
- Boundary comparison
- Boundary comparison yok
- Access conclusion
- Access claim yok
- Karşılaştırma kayıp bilgiyi taşıdı
sameOriginIdentity=false verilmiş predicate’tir. Serialization karşılaştırması context’in opaque türünü ve identity ayrımını kaybettirir; gerçek Document origins bu alias’lardan oluşturulmuş sayılmaz.
- Identity evidence
- opaque-A ≠ opaque-B / both null
- Boundary comparison
- Identity false / serialization equality insufficient
- Access conclusion
- Access claim yok
- Application access sonucu eklenmedi
Boundary classification gerçek browser read-policy veya server authorization sonucu değildir. BrowserEnforcementExecuted=false olduğu için response readability veya user entitlement bilinmez.
- Identity evidence
- opaque-A ≠ opaque-B / both null
- Boundary comparison
- Identity false / serialization equality insufficient
- Access conclusion
- UNKNOWN: actual access
- Null serialization identity taşımaz
opaque-A ve opaque-B aynı null metnine serialize olur, fakat örnekte iki ayrı identity’dir. Host/port tuple karşılaştırması bu opaque değerler için uygulanmaz. Internal identity ayrımı text equality ile geri elde edilemez.
- Identity evidence
- opaque-A ≠ opaque-B; text null / null
- Boundary comparison
- Identity false / serialization equality insufficient
- Access conclusion
- UNKNOWN: actual access
- Origin’in üretildiği context gerekir
Gerçek browser incelemesinde Document ve embedding/sandbox context’i origin identity’sinin kaynağıdır. Bu alias örneği Document oluşturmaz; null metnini trusted origin veya access allowance olarak kullanmaz. Hangi context’in hangi identity’yi ürettiği gözlenmeden bu ilişki bilinmez.
- Identity evidence
- opaque-A ≠ opaque-B; text null / null
- Boundary comparison
- Alias identity verilmiş; gerçek Document yok
- Access conclusion
- UNKNOWN: actual access
- Control gereken sınırı korudu
Opaque identity ayrımı serialization’ın dışında korunur. Gerçek Document/sandbox context ve enforcement için ayrı gözlem gerekir; null text equality allow üretmez.
- Identity evidence
- opaque-A ≠ opaque-B; text null / null
- Boundary comparison
- Alias identity verilmiş; gerçek Document yok
- Access conclusion
- Opaque identity separate / enforcement unknown
VARSAYIM · SINIR · KONTROL
Karşılaştırmanın hangi sınırı ölçtüğünü sor
Aynı domain ailesi ifadesi teknik sonuç için yetersizdir. app ve api host’ları same-site olup cross-origin olabilir; port değişikliği de origin’i ayırabilir. Bir bulguyu açıklarken URL pair’i, normalized origin’i ve site sonucunu birlikte göster.
Artifact’ta API host branch’ini seç: parser iki farklı origin üretir, selected PSL fixture ise aynı site üretir. İkinci sonucu birincinin yerine koymak, browser trust boundary’sini yanlış yorumlar.
Matrix’te subdomain ve port case’leri aynı false/true pair’ini verir: same-origin false, same-site true. Fakat farklı olma nedeni birinde host, diğerinde port’tur. Boundary bulgusunu yalnız boolean ile özetlemek yerine değişen tuple component’ini de göster; önerilecek kontrolün hangi alanı koruması gerektiği böyle anlaşılır.
Sınıflandırma ile gerçek erişimi ayır
Same-origin tablosundan server’ın ne döndürdüğünü veya kullanıcının neye authorized olduğunu çıkarma. Bu ders URL tuple’larını hesaplıyor; browser read-policy, actual request veya authz sonucu ölçmüyor.
Opaque branch iki ayrı identity’nin serialization’da ayırt edilemeyebileceğini gösterir. Sadece text equality’ye dayanan bir audit kaydı yeterli olmayabilir; origin’in türünü ve context’ini de koru.
Opaque fixture’da iki identity alias’ı explicit olarak farklıdır; null metni bu bilgiyi taşımaz. Buradan browser’ın hangi iframe’e hangi identity verdiği sonucu çıkarılamaz. Bu daha geniş soru için gerçek Document/sandbox context’i gerekir; artifact kuralı gösterir, oluşturulmamış bir browser context’ini ölçmüş gibi davranmaz.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Domain map
- Base origin ile site ayrı sütunlar
baseOrigin=https://app.example.com, baseSite=https://example.com’dur. Path/query/fragment değişimi same-origin kalır; site grouping’i consumer authorization değildir.
- URL matrix evidence
- Base origin / base site separate
- Tuple/domain calculation
- Tuple review yok
- Change review
- Coverage sonucu yok
- Normalized port baseline’ı hesaplandı
Explicit port 443 normalleştirilince origin https://app.example.com olarak kalır. Port 8443 için origin https://app.example.com:8443 olur; site grubu değişmez. Raw URL eşitliği ile origin tuple eşitliği ayrı okunur.
- URL matrix evidence
- Base origin / base site separate
- Tuple/domain calculation
- 443 normalized / 8443 cross-origin
- Change review
- Coverage sonucu yok
- Host map kapsamı açık kaldı
app ve api.example.com için registrable domain example.com’dur; app.example.org için example.org’dur. Liste dışındaki host için bu seçilmiş map sonuç üretmez.
- URL matrix evidence
- com/org fixture map only
- Tuple/domain calculation
- 443 normalized / 8443 cross-origin
- Change review
- Coverage sonucu yok
- Scheme negative control korundu
http://app.example.com/catalog case’i origin=http://app.example.com, site=http://example.com olur. Schemeful site HTTPS baseline ile false’tur; port rule’dan farklı component değişmiştir.
- URL matrix evidence
- com/org fixture map only
- Tuple/domain calculation
- HTTP vs HTTPS / both scopes differ
- Change review
- Coverage sonucu yok
- Observation türü açık tutuldu
Normal URL parser origin hesabı, seçilmiş domain map site hesabı ve gerçek browser enforcement ayrı evidence türleridir. gerçek enforcement çalışmadığı için CORS/read-policy veya resource allow sonucu eklenmez.
- URL matrix evidence
- com/org fixture map only
- Tuple/domain calculation
- HTTP vs HTTPS / both scopes differ
- Change review
- Parser / fixture / enforcement separate
- Change review gerçek gereksinime bağlandı
Same-host/default-port, subdomain, port, scheme, other-site controls birlikte tutulur. Unknown context için not-computed sonucu uygun olmayan PSL genellemesinden daha doğru kalır.
- URL matrix evidence
- com/org fixture map only
- Tuple/domain calculation
- HTTP vs HTTPS / both scopes differ
- Change review
- Scoped matrix consistent / unknown retained
Port değişimi
- Aynı host’un iki portu seçildi
Başlangıç https://app.example.com/catalog, karşılaştırma https://app.example.com:8443/catalog’tur. Scheme ve hostname aynı, effective port farklıdır. Henüz access veya network sonucu yoktur.
- URL matrix evidence
- app.example.com; HTTPS; 443 / 8443
- Tuple/domain calculation
- Tuple karşılaştırması bekliyor
- Change review
- Access gözlenmedi
- Port origin tuple’ını ayırır
URL API iki origin üretir: https://app.example.com ve https://app.example.com:8443. 443 HTTPS default port olduğu için normalize olur; non-default 8443 korunur. Bu pair için sameOrigin=false çıkar.
- URL matrix evidence
- Default 443 / explicit 8443
- Tuple/domain calculation
- Same-origin false; port farklı
- Change review
- Access gözlenmedi
- Site hesabı portu kullanmaz
Verilmiş domain map app.example.com’u example.com’a bağlar. İki URL de https scheme kullandığından site https://example.com olur ve sameSite=true kalır. Origin farkı bu site eşitliğiyle silinmez.
- URL matrix evidence
- https + example.com iki URL’de aynı
- Tuple/domain calculation
- Same-origin false / same-site true
- Change review
- Access gözlenmedi
- Scheme değişikliği başka bir row’dur
Ayrı http://app.example.com/catalog row’u hem origin’i hem schemeful site’i değiştirir. Port-change dalında scheme HTTPS kalır ve same-site sonucu true’dur. HTTP row’unun false site sonucunu bu port karşılaştırmasına kopyalama.
- URL matrix evidence
- Port pair’i HTTPS olarak kaldı
- Tuple/domain calculation
- Port pair: false / true; scheme row ayrı
- Change review
- Access gözlenmedi
- Hesap üreticisi enforcement üreticisi değildir
Origin çıktısı native URL API’den, site çıktısı yalnız verilmiş registrable-domain map’ten gelir. Browser response read-policy’si ve server resource policy’si bu hesapları tüketebilen ayrı işlemlerdir; burada çalıştırılmamıştır.
- URL matrix evidence
- URL pair’i ve çıktılar birlikte tutulur
- Tuple/domain calculation
- Origin API / site fixture / enforcement ayrı
- Change review
- Coverage hesapla sınırlı; allow yok
- Consumer sözleşmesi yeni origin’i değerlendirmeli
API’nin kendi port’u 8443’e geçerse API origin’i değişir; consumer Document’ın origin’i bu değişiklikten kendiliğinden değişmez. Consumer/API ilişkisi ve CORS gereksinimi ayrıca değerlendirilir. Aynı site olması eski izin sözleşmesinin geçerli kaldığını kanıtlamaz.
- URL matrix evidence
- API origin değişti; consumer ayrı
- Tuple/domain calculation
- Same-origin false / same-site true
- Change review
- Classification biliniyor; app policy ayrı
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Origin policy’sini tam tuple ile tanımla
Normal HTTP(S) origin policy’sinde scheme, host ve normalized port’un tamamı gereksinime uygun olmalıdır. Sadece registrable domain’i kontrol etmek same-origin expectation’ı karşılamaz. Raw URL’de path’in değişmesi ise tek başına origin değişikliği değildir.
Yeni subdomain veya port ekleyen ürün değişikliğinde cookie, CORS ve server authz sözleşmelerini ayrı incele. Bir ayarın same-site olması diğer kontrolleri otomatik doğrulamaz.
Örneğin API’yi 443’ten 8443’e taşıma kararı yeni bir origin doğurur; same-site durumu aynı kalabilir. İzin verilen browser consumer’ları origin tuple’ıyla, kullanıcı/resource izinlerini ise server policy’siyle gözden geçir. İki değerlendirmeyi tek “domain trusted” sonucuna sıkıştırma; biri diğerinin kanıtını üretmez.
PSL ve exception bağlamını kaydet
Production site hesabında güncel, uygun PSL verisini kullanan platform/library davranışını tercih et. Son iki label kısayolunu bu dersin sınırlı example fixture’ından genelleme. IP, localhost ve opaque context’lerin kuralları ayrıca değerlendirilir.
Regression defterinde aynı-host/default-port, farklı-port, subdomain, farklı-scheme ve farklı-site pair’leri bulunsun. Her observation’ın native parser mı, selected fixture hesabı mı yoksa gerçek browser enforcement mı olduğunu açıkça belirt.
Bu dersin altı ordinary URL pair’ini regression defterine alırken expectedOrigin ve expectedSite sütunlarını ayrı tut. Selected fixture domain’leri liste dışındaki host için sonuç üretmesin. Desteklenmeyen context için unknown/not-computed observation’ı, yanlış bir evrensel PSL hesabından daha doğru kanıttır.
ŞİMDİ VAKAYA UYGULA
Tuple, registrable domain ve opaque identity nasıl ayrı korunur?
app ve api.example.com same-site olsa da cross-origin’dir. Port 8443 kullanıldığında origin değişir. opaque-A ile opaque-B aynı null metnine serialize edilse bile verilen iki identity birbirinden farklıdır.
Vakadaki browser ve API’yi URL bileşenleriyle tanımla. Target, origin ve site aynı soru değildir; her birini hangi kararın kullandığını belirt.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Origin / schemeful site karşılaştırma matrisi
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"base": "https://app.example.com/catalog",
"baseOrigin": "https://app.example.com",
"baseSite": "https://example.com",
"fixtureRegistrableDomains": {
"app.example.com": "example.com",
"api.example.com": "example.com",
"app.example.org": "example.org"
},
"cases": [
{
"case": "same-origin",
"url": "https://app.example.com/notes?lang=en#new",
"expectedOrigin": "https://app.example.com",
"expectedSite": "https://example.com",
"sameOrigin": true,
"sameSite": true
},
{
"case": "default-port",
"url": "https://app.example.com:443/catalog",
"expectedOrigin": "https://app.example.com",
"expectedSite": "https://example.com",
"sameOrigin": true,
"sameSite": true
},
{
"case": "subdomain",
"url": "https://api.example.com/catalog",
"expectedOrigin": "https://api.example.com",
"expectedSite": "https://example.com",
"sameOrigin": false,
"sameSite": true
},
{
"case": "port",
"url": "https://app.example.com:8443/catalog",
"expectedOrigin": "https://app.example.com:8443",
"expectedSite": "https://example.com",
"sameOrigin": false,
"sameSite": true
},
{
"case": "scheme",
"url": "http://app.example.com/catalog",
"expectedOrigin": "http://app.example.com",
"expectedSite": "http://example.com",
"sameOrigin": false,
"sameSite": false
},
{
"case": "other-site",
"url": "https://app.example.org/catalog",
"expectedOrigin": "https://app.example.org",
"expectedSite": "https://example.org",
"sameOrigin": false,
"sameSite": false
}
],
"opaqueComparison": {
"leftIdentity": "opaque-A",
"rightIdentity": "opaque-B",
"leftSerialization": "null",
"rightSerialization": "null",
"sameOriginIdentity": false,
"scope": "Supplied distinct identities, not actual browser Document origin objects"
},
"pslScope": "Explicit selected com/org examples only; not a complete PSL implementation",
"browserEnforcementExecuted": false
}- baseOrigin / baseSite
- Başlangıç adresi için iki farklı boundary.
- cases.sameOrigin
- HTTP(S) normalized tuple eşitliği.
- cases.sameSite
- Explicit registrable domain fixture ile schemeful site eşitliği.
- opaqueComparison
- Aynı serialization, ayrı supplied identity; browser enforcement değil.
URL.origin gerçek Node API ile hesaplanır. Site yalnız declared fixture domain map’iyle hesaplanır; full PSL, Document origins, SOP/CORS/cookie veya network çalıştırılmaz.
İki yanlış kanı
Same-site uygulamalar same-origin yetkisini paylaşır.
Subdomain veya port origin’i ayırabilir. Site sınıflandırması DOM/read izni veya object authorization değildir.
Aynı null metnine serialize olan origin’ler eşittir.
Opaque identity’ler serialization’dan geri üretilemez; distinct identity’ler aynı text’i paylaşabilir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
https://app.example.com:443 ile base URL aynı origin’de mi?
- Evet. HTTPS için default port 443 aynı effective port’tur.
- Hayır. String’de :443 görünmesi origin’i her zaman değiştirir.
Gerekçeli cevabı oku
Evet. HTTPS için default port 443 aynı effective port’tur. — Explicit :443 default port olarak normalize edilir. Path, query ve fragment origin tuple’ına dahil değildir.
İki opaque origin de null olarak serialize edilmiş. Aynı origin oldukları çıkarılabilir mi?
Dersten seçilen artifact alanları; öğretim örneği
- opaqueComparison
- {"leftIdentity":"opaque-A","rightIdentity":"opaque-B","leftSerialization":"null","rightSerialization":"null","sameOriginIdentity":false,"scope":"Supplied distinct identities, not actual browser Document origin objects"}
- Hayır. opaque-A ve opaque-B ayrı identity’lerdir.
- Evet. null string’leri eşitse identity de aynıdır.
Gerekçeli cevabı oku
Hayır. opaque-A ve opaque-B ayrı identity’lerdir. — Serialization benzersiz identity token değildir. Örnekte sameOriginIdentity=false açıkça verilmiştir.
api.example.com same-site, fakat cross-origin. Bu fark neden sibling application’a script read izni vermez?
Gerekçeli cevabı oku
Schemeful site, bu örnekte registrable domain üzerinden eşleşir. Hostname değiştiği için origin farklıdır. Same-site gruplaması SOP’yi kaldırmaz veya sibling application’ın güvenilir olduğunu kanıtlamaz. Örnek PSL’nin yalnız com/org durumlarını kullanır; browser enforcement çalıştırmaz.
□ Same-site ile same-origin’i ayırdım.
□ Site gruplamasından script read izni çıkarmadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
MANUAL LAB
URL Boundary Lab
Component, origin/site ve relative resolution sonuçlarını önce tahmin et, sonra native API ile karşılaştır.
Tahmin → gözlem → açıklama workbook’unu aç ↗GitHub kaynakları ↗Kaynaklar ve kapsam
- WHATWG HTML — Origins and sites7.1.1 Origins: tuple/opaque; serialization; same origin · 7.1.1.1 Sites: obtain a site; same site
- WHATWG — URL StandardGoals · 4.1 URLs · 4.2 URL miscellaneous: default port · 4.4 URL parsing · 4.7 Origin · 6.1 URL class
- MDN — SiteDescription: registrable domain; schemeful site; origin comparison
- MDN — OriginScheme, hostname, and port definition
- Public Suffix List — LearnWhat is a public suffix?; registrable domains and cookie boundaries