"Aynı site" ve "aynı kaynak" terimleri sık sık alıntılanan ancak genellikle yanlış anlaşılan terimlerdir. Örneğin sayfa geçişleri, fetch()
istekleri, çerezler, açılış pop-up'ları, yerleştirilmiş kaynaklar ve iframe'ler bağlamında kullanılırlar. Bu sayfada, bunların ne olduğu ve birbirlerinden farkları açıklanmaktadır.
Köken
"Kaynak"; bir şema
(ör. HTTP veya HTTPS
olarak protokol olarak da bilinir),
ana makine adı
ve bir
bağlantı noktası
(belirtilirse) birleşimidir. Örneğin, https://www.example.com:443/foo
URL'si verildiğinde "kaynak" https://www.example.com:443
olur.
"Same-origin" ve "cross-origin"
Aynı şema, ana makine adı ve bağlantı noktası kombinasyonuna sahip web siteleri "aynı kaynak" olarak kabul edilir. Diğer her şey "kaynaklar arası" olarak kabul edilir.
Kaynak A | Kaynak B | "Aynı kaynak" mı yoksa "çapraz kaynak" mı? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Çapraz kaynak: farklı alan adları |
https://example.com:443 | Çapraz kaynak: farklı alt alan adları | |
https://giriş.example.com:443 | Çapraz kaynak: farklı alt alan adları | |
http://www.example.com:443 | Çapraz kaynak: farklı şemalar | |
https://www.example.com:80 | Çapraz kaynak: farklı bağlantı noktaları | |
https://www.example.com:443 | Same-origin: tam eşleme | |
https://www.example.com | Same-origin: implicit bağlantı noktası numarası (443) ile eşleşir |
Site
.com
ve .org
gibi üst düzey alanlar (TLD'ler), Root Zone Database'de listelenir. Önceki
örnekte "site"; şema, TLD ve alan adının kendisinden hemen önceki bölümünün (TLD+1 olarak adlandırılır) kombinasyonudur. Örneğin, https://www.example.com:443/foo
URL'si verildiğinde "site" https://example.com
olur.
Genel Son Ek Listesi ve eTLD
.co.jp
veya .github.io
gibi öğelere sahip alan adları için yalnızca .jp
ya da .io
kullanmak "siteyi" tanımlamak için yeterli değildir. Belirli bir TLD için kaydedilebilir alan adı düzeyini algoritmik olarak belirlemenin bir yolu yoktur.
Buna yardımcı olmak için Genel Son Ek Listesi, etkili TLD'ler (eTLD'ler) olarak da adlandırılan herkese açık son eklerin bir listesini tanımlar. eTLD listesi publicsuffix.org/list adresinde bulunur.
eTLD içeren bir alanın "site" bölümünü tanımlamak için .com
örneğiyle aynı uygulamayı uygulayın. Örneğin https://www.project.github.io:443/foo
, şema https
, eTLD .github.io
ve eTLD+1 project.github.io
şeklindedir. Dolayısıyla https://project.github.io
, bu URL için "site" olarak kabul edilir.
"aynı-site" ve "siteler arası"
Aynı şemaya ve aynı eTLD+1'e sahip web siteleri "aynı site" olarak kabul edilir. Farklı bir şema veya farklı bir eTLD+1'e sahip web siteleri, "siteler arası"dır.
Kaynak A | Kaynak B | "Aynı site" mi, yoksa "siteler arası" mı? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Siteler arası: farklı alan adları |
https://giriş.example.com:443 | Aynı site: Farklı alt alan adları önemli değildir | |
http://www.example.com:443 | Siteler arası: farklı şemalar | |
https://www.example.com:80 | Aynı site: Farklı bağlantı noktaları önemli değildir | |
https://www.example.com:443 | Aynı site: tam eşleme | |
https://www.example.com | Aynı site: Bağlantı noktaları önemli değildir |
"Şemasız aynı site"
"Aynı site"nin tanımı, HTTP'nin zayıf kanal olarak kullanılmasını önlemek için sitenin bir parçası olarak URL şemasını içerecek şekilde değiştirildi.
Şema karşılaştırması içermeyen eski "aynı site" kavramı artık "Şemasız aynı site" olarak adlandırılıyor. Örneğin, yalnızca eTLD+1 bölümü önemli olduğundan ve şema dikkate alınmadığından http://www.example.com
ve https://www.example.com
, şemasız aynı site olarak kabul edilir ancak aynı site değildir.
Kaynak A | Kaynak B | "Şemasız aynı site" mi yoksa "siteler arası" mı? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Siteler arası: farklı alan adları |
https://giriş.example.com:443 | Şemasız aynı site: Farklı alt alan adları fark etmez | |
http://www.example.com:443 | Şemasız aynı site: Farklı şemalar fark etmez | |
https://www.example.com:80 | Şemasız aynı site: Farklı bağlantı noktaları önemli değildir | |
https://www.example.com:443 | Şemasız same-site: tam eşleme | |
https://www.example.com | Şemasız aynı site: Bağlantı noktaları önemli değildir |
İsteğin "aynı site", "aynı kaynak" veya "siteler arası" olup olmadığını kontrol etme
Tüm modern tarayıcılar, istekleri Sec-Fetch-Site
HTTP üst bilgisi ile gönderir.
Başlık aşağıdaki değerlerden birine sahip olmalıdır:
cross-site
same-site
(düzenli şekilde aynı siteyi ifade eder)same-origin
none
İsteğin aynı site mi, aynı kaynak mı yoksa siteler arası mı olduğunu belirlemek için Sec-Fetch-Site
değerini inceleyebilirsiniz.
Sec-Fetch-Site
üst bilgisinin değerine makul ölçüde güvenebilirsiniz, çünkü:
Sec-
ile başlayan HTTP üstbilgileri JavaScript tarafından değiştirilemez- Bu başlıkları her zaman tarayıcı ayarlar.