Çerezi alt alan adı ile alan adı arasında paylaşma


420

İki sorum var. Alan adını .mydomain.comçerezde (baştaki nokta ile) olarak belirlersem, tüm alt alanların bir çerezi paylaşabileceğini anlıyorum .

İçinde subdomain.mydomain.comoluşturulmuş bir çereze erişebilir mi mydomain.com( wwwalt alan adı olmadan )?

Can mydomain.com(olmadan wwwoluşturulan eğer alt alan) çerez erişmek subdomain.mydomain.com?


3
Evet yapabilirsiniz .. lütfen aşağıdaki bağlantıya bakın codeguru.com/csharp/csharp/cs_internet/article.php/c19417/…
Rahul Jain


lütfen bu soruya bakabilir misiniz stackoverflow.com/questions/38351769/…
Jayavardhan Gange

1
@ adam0101 Etki alanı ve alt etki alanı farklı bir sunucuda barındırılıyorsa ne olur?
user3782114

3
@ user3782114, farklı sunucularda olup olmadıkları önemli değildir. Benim durumumda, sadece farklı sunucularda değil, her etki alanı birden çok sunucuda yük dengelemeli idi. Bizi biraz gezdiren bir şey, daha düşük ortamların (dev, test, uat, vb.) Bunu bir kez yaptıktan sonra aynı çerezi paylaşmaya başlamasıydı, çünkü onları "dev.oursite.com", "testi gibi adlandırmıştık. oursite.com ", vs .. Buradaki hile (en azından .Net'te) her ortam için ayrı bir makine anahtarı oluşturmak ve bunu Web.config dosyasında (her ortam için yapılandırmayı dönüştürdüğünüzü varsayarak) kaydetmektir.
adam0101

Yanıtlar:


653

2 alan adıdır mydomain.comve subdomain.mydomain.comçerezleri yalnızca alan adı Set-Cookiebaşlıkta açıkça belirtilmişse paylaşabilir . Aksi takdirde, çerezin kapsamı istek sahibiyle sınırlıdır. (Buna "yalnızca ana bilgisayar çerezi" denir. Bkz. Yalnızca ana bilgisayar çerezi nedir? )

Örneğin, şu başlığı gönderdiyseniz subdomain.mydomain.com, çerez istekleri için gönderilmez mydomain.com:

Set-Cookie: name=value

Ancak aşağıdakileri kullanırsanız, her iki alanda da kullanılabilir:

Set-Cookie: name=value; domain=mydomain.com

Bu çerez, alan adı alt alanları da dahil olmak üzere alanım.com'un herhangi bir alt alan adı için gönderilir subsub.subdomain.mydomain.com.

In RFC 2109 , önde gelen nokta olmadan bir alanı bu alt alanlara kullanılamadı ve sadece lider nokta (anlamına geliyordu .mydomain.com), bu üst düzey alanı çok alt alanda kullanılan (ancak edilecek böylece edildi ne sormak izin verecek eski özelliklerde mümkün değildir).

Bununla birlikte, tüm modern tarayıcılar daha yeni RFC 6265 spesifikasyonuna saygı gösterir ve önde gelen noktaları yoksayar; bu da tanımlama bilgisini alt alanlarda ve üst düzey alanda kullanabileceğiniz anlamına gelir.

Özetle, yukarıdaki ikinci örnek gibi bir çerez ayarlarsanız mydomain.com, bu öğeye erişebilir subdomain.mydomain.comve bunun tersi de geçerlidir. Bu, çerezlere izin vermek sub1.mydomain.comve sub2.mydomain.combunları paylaşmak için de kullanılabilir .

Ayrıca bakınız:


3
Teşekkürler; Noktanın önemi hakkında bir not ekledim.
cmbuckley

2
Neden sadece öncü olan "." ile eski ve yeni arasındaki maksimum uyumluluk için
Alan Macdonald

12
Eski standartta, içeren bir çerez domain=.mydomain.comçıplak etkialanim.com için geçerli değildir, bu nedenle iki RFC birbiriyle uyumlu değildir.
cmbuckley

4
@Frank, evet biliyorum. Yorumum, sorumun, iki alt alan arasında DEĞİL bir alan adı ile bir alt alan adı arasında çerez paylaşma ile ilgili olduğunu açıklığa kavuşturmaktı.
adam0101

3
Bunu nereye koyacağımdan emin değilim, bu yüzden kabul edilen cevabın yorumlarını seçiyorum. Uzun zaman aldı ve yerel ana bilgisayarımda yukarıda ispatlamak için deneyler başarısız oldu, bana kadar yerel ana ismi bir nokta ile çağırmalıyım. "Localhost.com" gibi bir şey. Daha sonra, tüm "set çerezleri" davranışları bu cevapta yazılan açıklamaları takip etmeye başladı. Bunu ummak birine yardımcı olabilir.
Cesc

32

@Cmbuckley yanıtının tam resmi gösterdiğinden emin değilim. Ne okudum:

Çerezin özellikleri aksini belirtmedikçe, çerez yalnızca başlangıç ​​sunucusuna (örneğin, herhangi bir alt etki alanına değil) döndürülür ve geçerli oturumun sonunda (kullanıcı aracısı tarafından tanımlandığı şekilde) sona erer. Kullanıcı aracıları tanınmayan çerezleri yok sayar.

RFC 6265

Ayrıca

8.6.  Weak Integrity

   Cookies do not provide integrity guarantees for sibling domains (and
   their subdomains).  For example, consider foo.example.com and
   bar.example.com.  The foo.example.com server can set a cookie with a
   Domain attribute of "example.com" (possibly overwriting an existing
   "example.com" cookie set by bar.example.com), and the user agent will
   include that cookie in HTTP requests to bar.example.com.  In the
   worst case, bar.example.com will be unable to distinguish this cookie
   from a cookie it set itself.  The foo.example.com server might be
   able to leverage this ability to mount an attack against
   bar.example.com.

Benim için bu, çerezlerin alt alan / alan tarafından okunmasını önleyebileceğiniz, ancak diğer alanlara çerez yazılmasını engelleyemeyeceğiniz anlamına gelir. Dolayısıyla, bir kişi aynı tarayıcı tarafından ziyaret edilen başka bir alt alan adını kontrol ederek site çerezlerinizi yeniden yazabilir. Bu büyük bir endişe olmayabilir.

@Cmbuckley tarafından sağlanan müthiş çerezler test sitesi / benim gibi cevabını kaçırmış olanlar için; yukarı ve yukarı oy vermeye değer /:


4
Söylediklerimle aynı fikirde görünüyor: a belirtmedikçe domain, çerez yalnızca istek sahibi için kullanılır. O Bu araçlar Set-Cookie: name=valuegelen mydomain.comalt alanlarına istekleri ile gönderilmeyecektir. Bu test komut dosyasıyla da oyna .
cmbuckley

@cmbuckley, tamam, söylediğin doğru görünüyor. Cevabımı yeniden yazacağım. Bunu işaret ettiğiniz için teşekkür ederim.
akostadinov

Belirtmek gerekir ki, bölüm 4.1.2 (ilk alıntı) normatif değildir ...
Velda

cmbuckley bağlantısı için teşekkürler. nasıl hızlı çalıştığını test etmek güzel.
lawphotog

22

DOM çerez API'sini kullanan bir örnek ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), böylece davranışı kendimiz görebiliriz.

Aşağıdaki JavaScript'i çalıştırırsak:

document.cookie = "anahtar = değer"

Yürütme ile aynı görünüyor:

document.cookie = "anahtar = değer; etki alanı = alanadim.com"

Çerez anahtarı alanadim.com etki alanında (yalnızca) kullanılabilir hale gelir .


Şimdi, etkialanim.com'da aşağıdaki JavaScript'i çalıştırırsanız:

document.cookie = "anahtar = değer; etki alanı = .alanadim.com"

Çerez anahtarı , alan_adim.com.tr ve alt alan.alanadim.com tarafından kullanılabilir hale gelir .


Son olarak, subdomain.mydomain.com adresinde aşağıdakileri denemeye çalışırsanız:

document.cookie = "anahtar = değer; etki alanı = .alanadim.com"

Çerez mu anahtarı için kullanılabilir hale subdomain.mydomain.com ? Buna izin verildiğine biraz şaşırdım; Bir alt etki alanının üst etki alanında bir çerez ayarlayabilmesinin bir güvenlik ihlali olacağını varsaymıştım.


1
Bu, httponlyçerezlerin davranışını ve oluşturduğunuz çerezlerin türünü açıklayan ayrı özellikler olup olmadığını merak ediyor .
adam0101

3
Gönderdiğiniz dokümanlar yaptığınız ifadelere uymuyor. İlk 2 örnek eşdeğer değildir (bir domainöznitelik, çerezin alt alanlarda çalışmasına neden olur; böyle bir öznitelik yoktur). Önde gelen noktalar en iyi şekilde göz ardı edilir ve en kötü durumda etkin şekilde engellenir.
cmbuckley

ana bilgisayar başlıklarına güvenmek istemiyorsanız bu en iyi çözümdür. Ben kontrol ve onun çalışma
Szymon

14

Lütfen herkes bir alan adındaki alt alan adından bir çerez ayarlayabileceğinizi unutmayın.

(istek için yanıt olarak gönderildi subdomain.mydomain.com)

Set-Cookie: name=value; Domain=mydomain.com // GOOD

Ama CAN NOT bir alt alanda bir etki alanından bir çerez bırakır.

(istek için yanıt olarak gönderildi mydomain.com)

Set-Cookie: name=value; Domain=subdomain.mydomain.com // Browser rejects cookie

NEDEN ?

Şartnameye göre RFC 6265 bölüm 5.3.6 Depolama Modeli

Standartlaştırılmış istek ana bilgisayarı etki alanı özniteliğiyle etki alanı eşleşmiyorsa : Çerezi tamamen yok sayın ve bu adımları iptal edin.

ve RFC 6265 bölüm 5.1.3 Alan Adı Eşleme

Alan Adı Eşleme

Bir dize etki alanı, aşağıdaki koşullardan en az biri geçerliyse belirli bir etki alanı dizesiyle eşleşir:

  1. Etki alanı dizesi ve dize aynıdır. (Hem alan adı dizesinin hem de dizenin bu noktada küçük harfe dönüştürüleceğini unutmayın.)

  2. Aşağıdaki koşulların tümü geçerlidir:

    • Etki alanı dizesi, dizenin sonekidir.

    • Dizenin etki alanı dizesine dahil edilmeyen son karakteri% x2E (".") Karakteridir.

    • Dize bir ana bilgisayar adıdır (yani bir IP adresi değil).

Dolayısıyla, "subdomain.mydomain.com" alan adı "alanadim.com.tr" ile eşleşir, ancak "alanadim.com", "subdomain.mydomain.com" alanıyla eşleşmez

Bu yanıtı da kontrol edin .


Bu benim için en yararlı cevaptı.
Toby

3

Her iki durumda da evet yapabilir ve bu hem IE hem de Edge için varsayılan davranıştır.

Diğer yanıtlar değerli bilgiler ekler, ancak Chrome'daki davranışı esas olarak tanımlar. IE'de davranışın tamamen farklı olduğuna dikkat etmek önemlidir. CMBuckley'nin çok yararlı test komut dosyası, (diyelim ki) Chrome'da, hiçbir alan belirtilmediğinde çerezlerin kök ve alt alan adları arasında paylaşılmadığını gösterir. Ancak aynı test IE'de paylaşıldığını gösterir. Bu IE durumu, CMBuckley'nin www-or-not-www bağlantısındaki eve götürme tanımına daha yakındır. Bunun böyle olduğunu biliyorum çünkü hem root hem de subdomain üzerinde farklı servicestack çerezleri kullanan bir sistemimiz var. Birisi IE'de erişene ve iki sistem önbelleği patlayana kadar oturum çerezi kazanacak kadar savaşana kadar her şey iyi çalıştı.


0

Localhost üzerinde çalışıyorsanız dikkatli olun! Çerezinizi js'de şu şekilde saklarsanız:

document.cookie = "key=value;domain=localhost"

Alt alanınıza erişilemeyebilir, örneğin sub.localhost. Bu sorunu çözmek için Sanal Ana Bilgisayar'ı kullanmanız gerekir . Örnek olarak, sanal ana makinenizi ile yapılandırabilirsiniz, ServerName localhost.comböylece çerezinizi etki alanınıza ve alt alan adınıza aşağıdaki gibi depolayabilirsiniz:

document.cookie = "key=value;domain=localhost.com"

-12

Basit çözüm

setcookie("NAME", "VALUE", time()+3600, '/', EXAMPLE.COM);

Setcookie'nin 5. parametresi, çerezin kullanılabileceği (alt) alan adlarını belirler. (EXAMPLE.COM) olarak ayarlanması, tüm alt alan adları için kullanılabilir hale getirir (örn: SUBDOMAIN.EXAMPLE.COM)

Referans: http://php.net/manual/en/function.setcookie.php


17
Bu soru PHP'ye özgü değil, geçerli olarak nitelendirdiğini sanmıyorum.
sergelerator

1
Sergelerator, soru sormadım. OP'ye cevap veriyordum.
Lawes

4
@ Kanunlar Bence sergelator OP sorusunun PHP'ye özgü olmadığı anlamına gelirken, cevabınız sadece PHP çözümü gibi görünüyor, bu nedenle OP sorusuna hak kazanmayacak.
Mirage
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.