Mam dwa pytania. Rozumiem, że jeśli podam domenę jako .mydomain.com
(z kropką wiodącą) w pliku cookie, wszystkie subdomeny mogą udostępniać plik cookie.
Czy można subdomain.mydomain.com
uzyskać dostęp do pliku cookie utworzonego w mydomain.com
(bez www
poddomeny)?
Czy mydomain.com
(bez www
poddomeny) może uzyskać dostęp do pliku cookie, jeśli został utworzony subdomain.mydomain.com
?
Odpowiedzi:
Dwie domeny
mydomain.com
isubdomain.mydomain.com
mogą udostępniać pliki cookie tylko wtedy, gdy domena jest wyraźnie wymieniona wSet-Cookie
nagłówku. W przeciwnym razie zakres pliku cookie jest ograniczony do hosta żądań. (Jest to określane jako „plik cookie tylko dla hosta”. Zobacz Co to jest plik cookie tylko dla hosta? )Na przykład, jeśli wysłałeś następujący nagłówek
subdomain.mydomain.com
, plik cookie nie zostanie wysłany z żądaniami domydomain.com
:Jeśli jednak użyjesz następujących opcji, będzie to możliwe w obu domenach:
Ten plik cookie zostanie wysłany dla dowolnej subdomeny mydomain.com, w tym takich jak zagnieżdżone subdomeny
subsub.subdomain.mydomain.com
.W RFC 2109 domena bez kropki wiodącej oznaczała, że nie można jej używać w subdomenach, a tylko kropka wiodąca (
.mydomain.com
) pozwala na użycie jej w wielu subdomenach (ale nie w domenie najwyższego poziomu, więc zapytano niemożliwe w starszej specyfikacji).Jednak wszystkie nowoczesne przeglądarki są zgodne z nowszą specyfikacją RFC 6265 i zignorują każdą kropkę wiodącą, co oznacza, że możesz używać plików cookie w subdomenach, a także w domenie najwyższego poziomu.
Podsumowując, jeśli ustawisz plik cookie taki jak w drugim przykładzie powyżej
mydomain.com
, będzie on dostępny przezsubdomain.mydomain.com
i na odwrót. Można to również wykorzystać do zezwalaniasub1.mydomain.com
isub2.mydomain.com
udostępniania plików cookie.Zobacz też:
źródło
domain=.mydomain.com
nie jest prawidłowy dla samej domeny mydomain.com, więc dwa RFC nie są ze sobą kompatybilne.Nie jestem pewien, czy odpowiedź @cmbuckley pokazuje pełny obraz. To co czytam to:
Również
Dla mnie oznacza to, że możesz chronić pliki cookie przed odczytaniem przez subdomenę / domenę, ale nie możesz zapobiec zapisywaniu plików cookie w innych domenach. Aby ktoś mógł przepisać pliki cookie witryny, kontrolując inną subdomenę odwiedzaną przez tę samą przeglądarkę. Co może nie być dużym problemem.
Niesamowita strona testowa ciasteczek dostarczona przez @cmbuckley / dla tych, którzy przegapili ją w swojej odpowiedzi, takiej jak ja; warte przewijania w górę i w górę /:
źródło
domain
, plik cookie jest używany tylko dla hosta żądań. Oznacza to, żeSet-Cookie: name=value
zmydomain.com
nie będą wysyłane żądania do poddomen. Zagraj też w ten skrypt testowy .Oto przykład z wykorzystaniem interfejsu API cookie DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), abyśmy sami mogli zobaczyć zachowanie.
Jeśli wykonamy następujący JavaScript:
Wygląda to tak samo jak wykonywanie:
Klucz cookie staje się dostępny (tylko) w domenie mojadomena.com .
Teraz, jeśli wykonasz następujący JavaScript w mydomain.com:
Klucz cookie staje się dostępny dla mydomain.com oraz subdomain.mydomain.com .
Na koniec, jeśli spróbujesz wykonać następujące czynności na subdomain.mydomain.com:
Czy klucz cookie jest dostępny dla subdomain.mydomain.com ? Byłem trochę zaskoczony, że jest to dozwolone; Zakładałem, że naruszenie zasad bezpieczeństwa dla subdomeny może umożliwić ustawienie pliku cookie w domenie nadrzędnej.
źródło
httponly
plików cookie w porównaniu z rodzajem plików cookie, które tworzysz.domain
atrybut powoduje, że plik cookie działa w subdomenach; żaden taki atrybut nie działa). Wiodące kropki są w najlepszym wypadku ignorowane, aw najgorszym aktywnie blokowane.Pamiętaj, że możesz ustawić plik cookie z subdomeny w domenie.
(wysłany w odpowiedzi na żądanie
subdomain.mydomain.com
)Ale NIE MOŻESZ ustawić pliku cookie z domeny w subdomenie.
(wysłany w odpowiedzi na żądanie
mydomain.com
)DLACZEGO ?
Zgodnie ze specyfikacją RFC 6265 sekcja 5.3.6 Model pamięci
i RFC 6265 sekcja 5.1.3 Dopasowanie domen
Zatem domena „subdomain.mydomain.com” pasuje do „mydomain.com”, ale „mydomain.com” NIE pasuje do domeny „subdomain.mydomain.com”
Sprawdź również tę odpowiedź .
źródło
W obu przypadkach tak może i jest to domyślne zachowanie zarówno dla IE, jak i Edge.
Pozostałe odpowiedzi dostarczają cennych informacji, ale głównie opisują zachowanie w Chrome. ważne jest, aby pamiętać, że zachowanie jest zupełnie inne w IE. Bardzo pomocny skrypt testowy CMBuckley pokazuje, że w (powiedzmy) Chrome pliki cookie nie są udostępniane między katalogiem głównym a poddomenami, gdy nie określono domeny. Jednak ten sam test w IE pokazuje, że są one udostępniane. Ten przypadek IE jest bliższy opisowi „od domu” w linku CMBuckley www-or-not-www. Wiem, że tak jest, ponieważ mamy system, który używał różnych plików cookie servicestack zarówno w katalogu głównym, jak i subdomenie. Wszystko działało dobrze, dopóki ktoś nie uzyskał do niego dostępu w IE, a dwa systemy walczyły o to, czy plik cookie sesji wygra, dopóki nie wysadzimy pamięci podręcznej.
źródło
Uważaj, jeśli pracujesz na localhost! Jeśli przechowujesz swój plik cookie w js w ten sposób:
Może nie być dostępny dla twojej subdomeny
sub.localhost
. Aby rozwiązać ten problem, musisz użyć wirtualnego hosta . Na przykład możesz skonfigurować swojego wirtualnego hosta, dziękiServerName
localhost.com
czemu będziesz mógł przechowywać swój plik cookie w swojej domenie i poddomenie w następujący sposób:źródło
Proste rozwiązanie
Piąty parametr Setcookie określa (pod) domeny, dla których plik cookie jest dostępny. Ustawienie go na (EXAMPLE.COM) powoduje, że jest ono dostępne dla dowolnej subdomeny (np .: SUBDOMAIN.EXAMPLE.COM)
Odniesienie: http://php.net/manual/en/function.setcookie.php
źródło