Tarayıcı çerez alan adları nasıl çalışır?


380

Aldığım garip alan / alt alan çerezi sorunları nedeniyle, tarayıcıların çerezleri nasıl ele aldığını bilmek istiyorum. Farklı şekillerde yaparlarsa, farklılıkları bilmek de güzel olurdu.

Başka bir deyişle - tarayıcı bir çerez aldığında, bu çerezin bir alan adı ve ona bağlı bir yolu olabilir. Ya da değil, bu durumda tarayıcı muhtemelen bazı varsayılanların yerine geçer. Soru 1: Nedir bunlar?

Daha sonra, tarayıcı bir istekte bulunmak üzereyken çerezlerini kontrol eder ve bu istek için göndermeleri gerekenleri filtreler. Bunu istek yolu ve etki alanı ile eşleştirerek yapar. Soru 2: Eşleşen kurallar nelerdir?


Katma:

Bunu sormamın nedeni, bazı uç davalarla ilgilenmem. Sevmek:

  • Bir çerez .example.comkullanılabilir www.example.commi?
  • Bir çerez .example.comkullanılabilir example.commi?
  • Bir çerez example.comkullanılabilir www.example.commi?
  • Bir çerez example.comkullanılabilir anotherexample.commi?
  • Will www.example.comiçin çerez ayarlayabilirsiniz example.com?
  • Will www.example.comiçin çerez ayarlayabilirsiniz www2.example.com?
  • Will www.example.comiçin çerez ayarlayabilirsiniz .com?
  • Vb.

Eklendi 2:

Ayrıca, birisi nasıl bir çerez ayarlamak gerektiğini önermek böylece:

  • www.example.comVeya tarafından ayarlanabilir example.com;
  • Hem www.example.comve tarafından erişilebilir example.com.

Yanıtlar:


367

Çerezleri günümüzde tanımlaması gereken RFC 2965 ( Set-Cookie2zaten kullanılmamış RFC 2109 ) olmasına rağmen , çoğu tarayıcı bunu tam olarak desteklemez, ancak Netscape'in orijinal şartnamesine uyar .

Etki Alanı öznitelik değeri ile etkili etki alanı arasında bir ayrım vardır : ilki Set-Cookiebaşlık alanından alınır ve ikincisi bu öznitelik değerinin yorumlanmasıdır. RFC 2965'e göre aşağıdakiler uygulanmalıdır:

  • Eğer Set-Cookie başlık alanı değil bir var Alan niteliği, etkili alanı isteğinin etki alanıdır.
  • Mevcut bir Domain özniteliği varsa, değeri etkili bir domain olarak kullanılır (değer bir ile başlamazsa .istemci tarafından eklenecektir).

Etkili etki alanına sahip olmak için, ayarlanmak üzere istenen geçerli etki alanını da eşleştirmesi gerekir ; aksi halde çerez revize edilecektir. Bir istekte gönderilecek çerezleri seçmek için aynı kural geçerlidir.


Bu bilgileri sorularınızla eşleştirdiğinizde aşağıdakiler geçerli olmalıdır:

  • İle çerez www.example.com için mevcut Domain=.example.com olacak
  • İle çerez example.com için mevcut Domain=.example.com olacak
  • Kurabiye Domain=example.comdönüştürülür .example.comböylece ve olacaktır da kullanılabilir olması www.example.com
  • Kurabiye Domain=example.comolacak değil kullanılabilir olması anotherexample.com
  • www.example.com , example.com için çerez ayarlayabilecektir
  • www.example.com olacak değil için ayarlanan çerezi muktedir www2.example.com
  • www.example.com olacak değil için ayarlanan çerezi muktedir .com

Ve www.example.com ve example.com tarafından / için bir çerez ayarlamak ve okumak için .www.example.com, .example.comsırasıyla ve için ayarlayın . Ama (ilk .www.example.com) sadece bu etki altında diğer etki alanları için erişilebilir olacaktır (örn foo.www.example.com veya bar.www.example.com ) nerede .example.comaşağıda başka etki alanı tarafından erişilebilir example.com mesela ( foo. example.com veya bar.example.com ).


@Gumbo Yani abcexample.com, çereze c.example.com alan adıyla erişebilir mi?
Pacerier

2
bu soruya çok geç bir soru. Kendi deneyimim ve bu: webmasters.stackexchange.com/questions/55790/… example.com alan adının www.example.com tarafından kullanılamayacağını, ancak bu örnek aksini önerdiğini gösteriyor. Bu örnek yanlış mı, yoksa yanlış anlaşılıyor muyum? Konu büyücülük için üzgünüm ama bu mükemmel cevabın benim gibi gelecekteki karışık yeni başlayanlar için% 100 doğru olduğundan emin olmak istedim :)
errah

7
bu cevap biraz modası geçmiş; cevabımı aşağıda görebilirsiniz .
ZhongYu

1
www.example.com için ornek.com ayarını neden kullanmıyorsunuz? (example.com'un bir "www" alt bölümü olduğu için?)
Nabeel Khan

Set-Cookie2'nin kendisi artık kullanılmıyor. Set-Cookie kullanmaya devam edin.
joeforker

122

Önceki cevaplar biraz modası geçmiş.

RFC 6265 , o sırada tarayıcı konsensüsüne dayanarak 2011 yılında yayınlandı. O zamandan beri, kamu son ek alanlarıyla bazı komplikasyonlar oldu. Mevcut durumu açıklayan bir makale yazdım - http://bayou.io/draft/cookie.domain.html

Özetlemek gerekirse, çerez alanıyla ilgili izlenecek kurallar:

  • Köken alan bir çerez kaynak isteğinin etki alanıdır.

  • Kökeni etki alanı bir IP ise, çerezin etki alanı özelliği ayarlanmamalıdır.

  • Bir çerezin alan adı özelliği ayarlanmamışsa, çerez yalnızca başlangıç ​​alan adı için geçerlidir.

  • Bir çerezin alan adı özelliği ayarlanmışsa,

    • çerez bu etki alanına ve tüm alt alanlarına uygulanabilir;
    • çerez alan adı, başlangıç ​​alan adıyla aynı veya bunun üst öğesiyle aynı olmalıdır
    • çerezin alan adı TLD, genel sonek veya genel son ekin üst öğesi olmamalıdır.

Bir çerezin başlangıçtaki etki alanına her zaman uygulanabilir olduğu türetilebilir.

Çerez alan adında olduğu gibi önde gelen bir nokta olmamalıdır .foo.com- sadecefoo.com

Örnek olarak,

  • x.y.z.comkendisi veya velilere bir çerez alan ayarlayabilirsiniz - x.y.z.com, y.z.com, z.com. Ama hayır com, bu bir kamu son ekidir.
  • etki alanı ile bir çerez = y.z.comuygulanabilir y.z.com, x.y.z.com, a.x.y.z.comvb

Kamu soneklerden Örnekleri - com, edu, uk, co.uk, blogspot.com,compute.amazonaws.com


5
@roelleor - tam tersi. rfc6265 çerezlerin aslında pratikte nasıl ele alındığını özetlemek için yazılmıştır :) evet, rfc büyük tarayıcıların nasıl davrandığının oldukça doğru bir yansımasıdır. tarayıcılardaki son testlerim bunu doğruladı. bununla birlikte, genel ekleri içeren köşe davalarında farklılık gösterebilirler.
ZhongYu

2
Önde gelen noktanın sonuçları nelerdir?
UpTheCreek

3
@UpTheCreek - rfc6265'e göre, önde gelen nokta müşteri tarafından göz ardı edilmelidir
ZhongYu

2
x.y.z.comBir çerezi ayarlamak tuhaf değil z.commi?
Royi Namir

1
Eğer xyzcom yzcom'a bir çerez ayarlayabiliyorsa ve yzcom etki alanına sahip bir çerez wyzcom için geçerliyse ... Bu, xyzcom'un wyzcom'a bir çerez ayarlayabileceği anlamına mı geliyor ?
Ioanna

9

Kapsamlı bir kapsam için RFC2965'in içeriğini inceleyin . Tabii ki bu, tüm tarayıcıların aynı şekilde davrandığı anlamına gelmez.

Ancak genel olarak, çerezde belirtilmemişse varsayılan Yol kuralı, URL'de Set-Cookie başlığının geldiği yoldur. Benzer şekilde Alan için varsayılan, Set-Cookie'nin geldiği URL'deki tam ana bilgisayar adıdır.

Etki alanı için eşleme kuralları, Etki Alanı çerezinin isteğin yapıldığı ana bilgisayarla eşleşmesini gerektirir. Çerez, dahil * ile daha geniş bir alan eşleşmesi belirtebilir. Set-Cookie'nin alan adı özelliğinde (tarayıcıların değişebileceği bu tek alan). Yolu eşleştirmek (etki alanı eşleşmelerini varsayarak), istenen yolun tanımlama bilgisinde belirtilen yolun içinde olması basit bir konudur. Genellikle oturum çerezleri path = / veya path = / applicationName / ile ayarlanır, böylece çerez uygulamaya yapılan tüm istekler için kullanılabilir olur.


Eklenen Yanıt:

  • Www.example.com için .example.com çerezi kullanılabilir mi? Evet
  • Example.com için .example.com çerezi kullanılabilir mi? Bilmiyorum
  • Example.com için bir çerez www.example.com için kullanılabilir mi? Olmamalı ama ... *
  • Example.com için bir çerez anotherexample.com için kullanılabilir mi? Hayır
  • Www.example.com, example.com için çerez ayarlayabilecek mi? Evet
  • Www.example.com www2.example.com için çerez ayarlayabilecek mi? Hayır (.example.com hariç)
  • Www.example.com .com için çerez ayarlayabilecek mi? Hayır (Bu, ad alanının yukarısında bir çerez ayarlanamaz veya .co.uk gibi bir şey için bir çerez ayarlayamazsınız) .

*Şu anda bu test edemiyorum ama en azından IE7 / 6 yolu example.comsanki sanki bir tedavi var .example.com.


Soruma ilginç bazı ilginç durumlar ekledim. Bununla ilgili bir şey öder misin?
Vilx-

8

Bu sorun için sonuncu (tam olarak üçüncü) RFC RFC-6265'tir (RFC-2965'i ​​geçersiz kılar ve RFC-2109'u geçersiz kılar).

Buna göre , sunucu Etki Alanı özniteliğini atlarsa, kullanıcı aracısı çerezi yalnızca kaynak sunucuya (belirli bir kaynağın bulunduğu sunucu) döndürür . Ancak , bazı mevcut kullanıcı aracılarının Etki Alanı özniteliğine yokmuş gibi bir Etki Alanı özniteliği varmış gibi davranır ve geçerli ana bilgisayar adını içeriyorsa da uyarır (örneğin, example.com , Etki Alanı özniteliği olmayan bir Set-Cookie başlığı döndürürse, bu kullanıcı aracıları çerezi yanlışlıkla www.example.com'a da gönder).

Etki Alanı özniteliği belirtildiğinde, tam etki alanı adı olarak değerlendirilir (öznitelikte baştaki nokta varsa yoksayılır). Sunucu, bu çerezi almak için öznitelikte belirtilen alanla eşleşmelidir (tam olarak aynı alan adına sahip olmalı veya alt alan adı olmalıdır). Daha doğrusu burada belirtildi .

Yani mesela:

  • çerez özelliği Domain=.example.comşuna eşdeğerdir:Domain=example.com
  • bu tür Etki Alanı özelliklerine sahip çerezler example.com ve www.example.com için kullanılabilir
  • Bu tür Alan Adı özelliklerine sahip çerezler another-example.com için kullanılamaz
  • çerez özniteliği gibi belirtmek www4.example.comDomain=www.example.com için yolu kapatır

PS: Alan adı özelliğinde sondaki virgül, kullanıcı aracısının = (


6

2019'da en son Chrome, Firefox, Safari'deki tüm vakaları test ettim.

Eklenen Yanıt:

  • Www.example.com için .example.com çerezi kullanılabilir mi? EVET
  • Example.com için .example.com çerezi kullanılabilir mi? EVET
  • Example.com için bir çerez www.example.com için kullanılabilir mi? HAYIR , Joker karakteri olmayan alan adı yalnızca kendisiyle eşleşir.
  • Example.com için bir çerez anotherexample.com için kullanılabilir mi? HAYIR
  • Www.example.com, example.com için çerez ayarlayabilecek mi? HAYIR , '.example.com' için çerez ayarlayabilir, ancak 'example.com' için çerez ayarlayamaz.
  • Www.example.com www2.example.com için çerez ayarlayabilecek mi? HAYIR . Ancak, www2.example.com'un erişebileceği .example.com için çerez ayarlayabilir.
  • Www.example.com .com için çerez ayarlayabilecek mi? HAYIR


3

Bir tarayıcının Javascript (VBScript'i test etmedim) kullanarak çerez kümesi için biraz farklı kurallar / yorumlar olan Set-header yanıt başlığını (sunucu tarafı çerez yazma) kabul edip etmeyeceğini belirleyen kurallar vardır.

Ardından, tarayıcının sayfa isteği ile birlikte bir çerez gönderip göndermeyeceğini belirleyen kurallar vardır.

Büyük tarayıcı motorları arasında etki alanı eşleşmelerinin nasıl işlendiği ve yol değerlerindeki parametrelerin nasıl yorumlandığı arasında farklar vardır. Farklı Tarayıcıların Tanımlama Bilgilerini Farklı Şekilde Ele Alma makalesinde bazı ampirik kanıtlar bulabilirsiniz.


2

Çerezleri reddetmeyle ilgili 3.3.2 bölümünü okumak beni şaşırttı:

http://tools.ietf.org/html/rfc2965

Bu, bir tarayıcının xyzcom'dan .z.com alan adıyla bir çerezi reddetmesi gerektiğini, çünkü 'xy' bir nokta içerdiğini söylüyor. Bu nedenle, RFC'yi ve / veya yukarıdaki soruları yanlış yorumlamadığım sürece, eklenen sorular olabilir:

Www.yyy.example.com için .example.com çerezi kullanılabilir mi? Hayır.

Etki alanı .example.com olan www.yyy.example.com kökeni sunucusu tarafından ayarlanan bir çerez, kullanıcı aracısı tarafından değeri xxx.example.com'a gönderilecek mi? Hayır.


2
o rfc modası geçmiş. tarayıcı fikir birliğine dayalı yeni rfc 6265, çerezlerin ve tüm alt alanlara z.comuygulanmasına izin verir . z.com
ZhongYu

1

Will www.example.comiçin çerez ayarlayabilirsiniz .com?

Hayır, ancak example.com.friçin bir çerez ayarlayabilir example2.com.fr. Firefox, TLD'lerin listesini tutarak buna karşı korur: http://securitylabs.websense.com/content/Blogs/3108.aspx

Görünüşe göre Internet Explorer iki harfli alan adlarının çerezleri ayarlamasına izin vermiyor. Sanırım neden o2.iesadece yönlendirmeyi açıklıyor o2online.ie. Bunu sık sık merak ederdim.


"com.fr", "public soneki" olarak belirtilir. çerez alanı genel sonek olamaz. bkz rfc 6265 ve publicsuffix.org
ZhongYu

Evet, bir çözüm var, ama son derece dağınık bir çözüm. Bu tür bir etiketleme, ad hoc olarak ayrı ayrı yapılmamalı, DNS'ye dönüştürülmelidir.
TR

Doğru ve belki "dbound" dan bahsediyorsunuz. Ancak bu daha fazla sorun yaratabilir; http istemci uygulamaları için bir meydan okuma gibi.
ZhongYu

Bu bilgilerin tarayıcıdan javascript'e bir şekilde açıklanması yararlı olacaktır. Aksi takdirde, belirli bir alan düzeyinde bir çerez ayarlayıp ayarlayamayacağınızı programlı olarak belirlemek mümkün değildir. Sonuçta her çağrıda bu listeyi kontrol edemezsiniz!
Dtipson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.