브라우저 쿠키 도메인은 어떻게 작동합니까?


380

이상한 도메인 / 하위 도메인 쿠키 문제로 인해 브라우저가 쿠키를 처리하는 방법을 알고 싶습니다. 그들이 다른 방식으로 그렇게한다면, 차이점을 아는 것도 좋을 것입니다.

즉, 브라우저가 쿠키를 수신하면 해당 쿠키에 도메인과 경로가 첨부 될 수 있습니다. 그렇지 않으면 브라우저가 기본값을 대체 할 수 있습니다. 질문 1 : 그들은 무엇입니까?

나중에 브라우저가 요청하려고 할 때 쿠키를 확인하고 해당 요청에 대해 보내야 할 쿠키를 필터링합니다. 요청 경로 및 도메인과 일치 시켜서 수행합니다. 질문 2 : 일치하는 규칙은 무엇입니까?


추가 :

내가 묻는 이유는 일부 경우에 관심이 있기 때문입니다. 처럼:

  • 쿠키를 .example.com사용할 수 www.example.com있습니까?
  • 쿠키를 .example.com사용할 수 example.com있습니까?
  • 쿠키를 example.com사용할 수 www.example.com있습니까?
  • 쿠키를 example.com사용할 수 anotherexample.com있습니까?
  • 의지 www.example.com 을 위해 쿠키를 설정할 수 있습니다 example.com?
  • www.example.com을 위해 쿠키를 설정할 수www2.example.com?
  • www.example.com을 위해 쿠키를 설정할 수.com?
  • 기타.

추가 2 :

또한 누군가 쿠키를 설정하는 방법을 제안 할 수 있습니까?

  • www.example.com또는 다음 중 하나로 설정할 수 있습니다example.com .
  • 그것은 모두가 액세스 www.example.com하고 example.com.

답변:


367

이 있지만 RFC 2965 ( Set-Cookie2이미 폐기했다 2109 RFC ) 해야 요즘 쿠키를 정의, 대부분의 브라우저는 완전히 그를 지원하지만, 단지에 준수하지 않는 넷스케이프에 의해 원래의 사양 .

도메인 속성 값과 유효 도메인 사이에는 차이가 있습니다. 전자는 Set-Cookie헤더 필드 에서 가져 오고 후자는 해당 속성 값의 해석입니다. RFC 2965에 따르면 다음이 적용되어야합니다.

  • 는 IF 설정 - 쿠키 헤더 필드가 없는도메인의 속성을 유효 도메인은 요청의 도메인입니다.
  • 있을 경우 도메인 속성이 존재 (값이 시작되지 않는 경우, 그 값이 유효 영역으로 사용되는 .그 클라이언트가 추가 될 것이다).

유효 도메인이 있으면 설정을 위해 현재 요청 된 도메인 과 도메인 일치 해야합니다 . 그렇지 않으면 쿠키가 수정됩니다. 요청에 보낼 쿠키를 선택하는 경우에도 동일한 규칙이 적용됩니다.


이 지식을 질문에 매핑하면 다음이 적용됩니다.

  • 와 쿠키 Domain=.example.com 것이다 사용할 수 www.example.com
  • 와 쿠키 Domain=.example.com 것이다 사용할 수 example.com
  • 와 쿠키 Domain=example.com로 변환됩니다 .example.com따라서와는 또한 사용할 수 www.example.com
  • 와 쿠키는 Domain=example.com것입니다 하지 사용할 수 anotherexample.com
  • www.example.com example.com에 쿠키를 설정할 수 있습니다
  • www.example.com는 것입니다 하지 에 대한 설정 쿠키 할 수있을 www2.example.com
  • www.example.com.com에 쿠키를 설정할 수 없습니다

그리고 세트에 의해 / 위해 쿠키를 읽을 www.example.comexample.com 을 위해 그것을 설정 .www.example.com하고 .example.com각각. 그러나 첫 번째 ( .www.example.com)는 해당 도메인 아래의 다른 도메인 (예 : foo.www.example.com 또는 bar.www.example.com ) .example.com에만 액세스 할 수 있으며 example.com 아래의 다른 도메인 (예 : foo ) 에서도 액세스 할 수 있습니다 . example.com 또는 bar.example.com ).


@Gumbo 그렇다면 abcexample.com은 c.example.com 도메인의 쿠키에 액세스 할 수 있습니까?
Pacerier

2
이것에 대한 매우 늦은 후속 질문. 내 경험과 이것 : webmasters.stackexchange.com/questions/55790/… example.com의 도메인을 www.example.com에서 사용할 수는 없지만이 예에서는 그렇지 않습니다. 이 예가 잘못 되었습니까, 아니면 (아마도) 오해입니까? 스레드 necromancy에 대 한 미안하지만이 훌륭한 답변 나 같은 미래의 혼란 초보자에 대 한 100 % 정확한 확인 싶 었 어 요 :)
errah

7
이 답변은 약간 구식입니다. 아래 내 답변을 참조하십시오 .
ZhongYu

1
www.example.com에 example.com을 설정할 수없는 이유는 무엇입니까? (example.com의 "www"하위 사이트이므로
Nabeel Khan

Set-Cookie2 자체는 더 이상 사용되지 않습니다. Set-Cookie를 계속 사용하십시오.
joeforker

122

이전 답변은 약간 구식입니다.

RFC 6265 는 당시 브라우저 합의를 기반으로 2011 년에 출판되었습니다. 그 이후로, 공개 접미어 도메인과 약간의 합병증이있었습니다. 현재 상황을 설명하는 기사를 작성했습니다. -http //bayou.io/draft/cookie.domain.html

쿠키 도메인과 관련된 규칙을 요약하면 다음과 같습니다.

  • 쿠키 의 원래 도메인 은 원래 요청의 도메인입니다.

  • 원래 도메인이 IP 인 경우 쿠키의 도메인 속성을 설정하지 않아야합니다.

  • 쿠키의 도메인 속성이 설정되지 않은 경우 쿠키는 원래 도메인에만 적용됩니다.

  • 쿠키의 도메인 속성이 설정된 경우

    • 쿠키는 해당 도메인과 모든 하위 도메인에 적용됩니다.
    • 쿠키의 도메인은 원본 도메인과 동일하거나 상위 도메인이어야합니다
    • 쿠키의 도메인은 TLD, 공개 접미사 또는 공개 접미사의 부모가 아니어야합니다.

쿠키는 항상 원래 도메인에 적용 가능하다는 것을 알 수 있습니다.

쿠키 도메인은 다음과 같이 선행 점이 없어야 .foo.com합니다.foo.com

예로서,

  • x.y.z.com자체 또는 부모 쿠키 도메인을 설정할 수 있습니다 - x.y.z.com, y.z.com, z.com. 그러나 com는 공개 접미사입니다.
  • 도메인과 쿠키 = y.z.com에 적용 y.z.com, x.y.z.com, a.x.y.z.com

공공 접미사의 예 - com, edu, uk, co.uk, blogspot.com,compute.amazonaws.com


5
@roelleor-그것은 다른 길입니다. rfc6265는 실제로 쿠키가 실제로 어떻게 처리되는지를 요약하기 위해 작성되었습니다. 그렇습니다. rfc는 주요 브라우저의 작동 방식을 매우 정확하게 반영합니다. 브라우저에서 최근에 테스트 한 것이 확인되었습니다. 그러나 공개 접미사와 관련된 경우에는 다를 수 있습니다.
ZhongYu

2
선행 점의 결과는 무엇입니까?
UpTheCreek

3
@UpTheCreek-rfc6265에 따르면 선행 점은 클라이언트에 의해 무시되어야합니다.
ZhongYu

2
x.y.z.com쿠키를 설정할 수있는 것이 이상하지 z.com않습니까?
Royi Namir

1
xyzcom이 쿠키를 yzcom으로 설정할 수 있고 도메인 yzcom을 가진 쿠키가 wyzcom에 적용 가능하다면 xyzcom이 쿠키를 wyzcom으로 설정할 수 있습니까?
Ioanna

9

광범위한 적용 범위는 RFC2965 의 내용을 검토하십시오 . 물론 모든 브라우저가 정확히 같은 방식으로 작동한다는 것을 의미하지는 않습니다.

그러나 일반적으로 쿠키에 지정되지 않은 경우 기본 경로에 대한 규칙은 Set-Cookie 헤더가 도착한 URL의 경로입니다. 마찬가지로 도메인의 기본값은 Set-Cookie가 도착한 URL의 전체 호스트 이름입니다.

도메인에 대한 일치 규칙을 사용하려면 쿠키 도메인에 요청중인 호스트와 일치해야합니다. 쿠키는 include *를 사용하여 더 넓은 도메인 일치를 지정할 수 있습니다. Set-Cookie의 도메인 속성 (브라우저마다 다를 수있는 영역)에서 경로 일치 (도메인 일치 가정)는 요청 된 경로가 쿠키에 지정된 경로 안에 있어야한다는 간단한 문제입니다. 일반적으로 세션 쿠키는 path = / 또는 path = / applicationName /으로 설정되므로 쿠키는 응용 프로그램에 대한 모든 요청에 ​​사용할 수 있습니다.


추가 된 답변 :

  • www.example.com에 .example.com의 쿠키를 사용할 수 있습니까?
  • example.com에서 .example.com의 쿠키를 사용할 수 있습니까? 몰라
  • www.example.com에서 example.com의 쿠키를 사용할 수 있습니까? 하지 말고 ... *
  • 다른 example.com에 example.com 쿠키를 사용할 수 있습니까? 아니
  • www.example.com이 example.com에 쿠키를 설정할 수 있습니까?
  • www.example.com이 www2.example.com에 쿠키를 설정할 수 있습니까? 아니요 (.example.com을 통한 제외)
  • www.example.com에서 .com에 쿠키를 설정할 수 있습니까? 아니요 (네임 스페이스를 높이는 쿠키를 설정할 수 없으며 .co.uk와 같은 쿠키를 설정할 수 없습니다) .

*나는 지금 이것을 테스트 할 수는 없지만 적어도 IE7 / 6이 경로 example.com를 마치 것처럼 취급 할 수있는 잉크 링을 가지고 있습니다 .example.com.


내 질문에 흥미로운 사례를 추가했습니다. 그것에 대해 칭찬 해 주시겠습니까?
Vilx-

8

이 문제에 대한 마지막 (정확히 세 번째) RFC는 RFC-6265입니다 (RFC-2965는 더 이상 사용되지 않으며 RFC-2109는 더 이상 사용되지 않음).

이에 따라 서버가 도메인의 속성을 생략하는 경우, 사용자 에이전트 만에 쿠키를 반환합니다 원본 서버 (서버 어떤 주어진 자원이 상주에). 그러나 일부 기존 사용자 에이전트는 도메인 속성이 존재 하지 않고 현재 호스트 이름을 포함하는 것처럼 존재하지 않는 도메인 속성을 처리한다고 경고 합니다 (예 : example.com 이 도메인 속성없이 Set-Cookie 헤더를 반환하면 이러한 사용자 에이전트는 쿠키를 www.example.com으로 잘못 전송하십시오).

Domain 속성이 지정되면 완전한 도메인 이름으로 취급됩니다 (속성에 선행 점이 있으면 무시됩니다). 이 쿠키를 얻으려면 서버가 속성에 지정된 도메인과 정확히 일치해야합니다 (정확히 동일한 도메인 이름 또는 하위 도메인이어야 함). 더 정확하게 여기에 지정했습니다 .

예를 들어,

  • 쿠키 속성 Domain=.example.comDomain=example.com
  • 이러한 도메인 속성을 가진 쿠키 는 example.comwww.example.com에서 사용할있습니다.
  • 다른 도메인 속성을 가진 쿠키 는 another-example.com에서 사용할없습니다
  • 쿠키 속성을 지정 Domain=www.example.com하면 www4.example.com에 대한 길을 닫을 수 있습니다.

추신 : 도메인 속성의 후행 쉼표는 사용자 에이전트가 속성 = (


6

2019의 최신 Chrome, Firefox, Safari에서 모든 사례를 테스트했습니다.

추가 된 답변 :

  • www.example.com에 .example.com의 쿠키를 사용할 수 있습니까?
  • example.com에서 .example.com의 쿠키를 사용할 수 있습니까?
  • www.example.com에서 example.com의 쿠키를 사용할 수 있습니까? 아니요 , 와일드 카드가없는 도메인은 자체 만 일치합니다.
  • 다른 example.com에 example.com 쿠키를 사용할 수 있습니까? 아니
  • www.example.com이 example.com에 쿠키를 설정할 수 있습니까? 아니요 , 'example.com'이 아닌 '.example.com'에 쿠키를 설정할 수 있습니다.
  • www.example.com이 www2.example.com에 쿠키를 설정할 수 있습니까? 아니요 . 그러나 www..example.com에 액세스 할 수있는 .example.com에 쿠키를 설정할 수 있습니다.
  • www.example.com에서 .com에 쿠키를 설정할 수 있습니까? 아니


3

브라우저가 자바 스크립트를 사용하는 쿠키 세트에 대한 약간 다른 규칙 / 해석 인 Set-header 응답 헤더 (서버 측 쿠키 작성)를 수락할지 여부를 결정하는 규칙이 있습니다 (VBScript는 테스트하지 않았습니다).

그런 다음 브라우저가 페이지 요청과 함께 쿠키를 보낼지 여부를 결정하는 규칙이 있습니다.

도메인 일치를 처리하는 방법과 경로 값의 매개 변수를 해석하는 방법은 주요 브라우저 엔진간에 차이가 있습니다. 다른 브라우저가 쿠키를 다르게 처리하는 방법 기사에서 경험적 증거를 찾을 수 있습니다.


2

쿠키 거부에 관한 섹션 3.3.2를 읽고 놀랐습니다.

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

즉, 'xy'에 점이 포함되어 있기 때문에 브라우저는 도메인 .z.com의 xyzcom에서 쿠키를 거부해야합니다. 따라서 RFC 및 / 또는 위의 질문을 잘못 해석하지 않는 한 질문이 추가 될 수 있습니다.

www.yyy.example.com에서 .example.com의 쿠키를 사용할 수 있습니까? 아니.

도메인 .example.com과 함께 오리진 서버 www.yyy.example.com에 의해 설정된 쿠키가 사용자 에이전트에 의해 xxx.example.com으로 전송 된 값을 갖습니까? 아니.


2
그 rfc는 구식입니다. 새로운 RFC 6265는, 브라우저의 합의에 따라,와 쿠키 허용 z.com에 적용 할 수 z.com모든 하위 도메인을.
ZhongYu

1

www.example.com 을 위해 쿠키를 설정할 수 있습니다 .com?

아니요,에 example.com.fr대한 쿠키를 설정할 수 있습니다 example2.com.fr. Firefox는 TLD 목록을 유지함으로써이를 방지합니다. http://securitylabs.websense.com/content/Blogs/3108.aspx

분명히 Internet Explorer가 나는 이유를 설명 가정 세트 쿠키, 두 문자로 된 도메인 허용하지 않습니다 o2.ie단지로 리디렉션을 o2online.ie. 나는 종종 궁금했다.


"com.fr"은 "public suffix"로 통용됩니다. 쿠키 도메인은 공개 접미사 일 수 없습니다. rfc 6265 및 publicsuffix.org
ZhongYu

예, 해결책이 있지만 매우 지저분한 해결책입니다. 이러한 종류의 라벨링은 DNS에 구워 져야하며, 별도로 수행되지는 않습니다.
TRiG

사실, 아마도 "dbound"를 언급하고있을 것입니다. 그러나 더 많은 문제가 발생할 수 있습니다. http 클라이언트 구현에 어려움을 겪고 있습니다.
ZhongYu

이 정보가 브라우저에서 자바 스크립트로 어떤 식 으로든 노출되면 유용 할 것입니다. 그렇지 않으면 특정 수준의 도메인에서 쿠키를 설정할 수 있는지 여부를 프로그래밍 방식으로 확인할 수 없습니다. 결국 모든 통화에서 해당 목록을 확인할 수 없습니다!
Dtipson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.