Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Subdomain

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

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

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

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

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

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

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

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

  1. Evet. HTTPS için default port 443 aynı effective port’tur.
  2. 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"}
  1. Hayır. opaque-A ve opaque-B ayrı identity’lerdir.
  2. 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