emahiro/b.log

Drastically Repeat Yourself !!!!

CookieのDomainとPath属性の仕様について調べた話

CookieのDomain属性について調べたのでその備忘録(rfcの該当箇所を抜き出しているだけです。)

調べた背景はCookieを送信する先のDomainとPathについてです。

Domain属性

www.example.com , admin.example.com の用にdomainは同じでも複数のサブドメインでに向けてCookieを送信したい場合のDomainの書き方についてブラウザで見ると .example.com の等に書かれているが、この記法をそのまま使っていいのかわからなかったので調べました。

Domain属性についての邦訳
https://triple-underscore.github.io/RFC6265-ja.html#section-4.1.2.3

rfcではこちら
https://tools.ietf.org/html/rfc6265#section-4.1.2.3

5.2.3における邦訳 cf. https://triple-underscore.github.io/RFC6265-ja.html#section-5.2.3 抜粋は以下

cookie ドメイン :← [ 属性値 の最初の文字 = %x2E( "." ) ならば 属性値 から最初の文字を除いた値 / 他の場合は 属性値 ]
cookie ドメイン ← cookie ドメイン を小文字化した結果
cookie 属性リスト に ( 名前: Domain, 値: cookie ドメイン ) の属性を付加する 

rfcではこちら https://tools.ietf.org/html/rfc6265#section-5.2.3

Domain属性についての規約からわかることはブラウザ上でDomainが .example.com と書かれていても、example.com とサーバー側では指定する

Path属性

上記と同じでドメインまたがりをする場合にCookieを送信できるpathを指定する方法を調べました。

Pathを指定するとどうなるのかというととあるCookieAを example.com に送信するという例で考えたときに

path=/foo

という指定をすると example.com というドメインを持つサイトでは /foo 以下のpathでしかCookieAを使うことはできない。

Cookieを送信できるpathは以下のように分類できます。

/foo => ⭕️

/foo/bar => ⭕️

/foobar => ❎

邦訳はこちら
https://triple-underscore.github.io/RFC6265-ja.html#section-4.1.2.4

邦訳の抜粋ですが、以下の点参考になりました。

所与のホストの中で,パスが異なる cookie を互いに隔離することは、一見 有用であるが,セキュリティは Path 属性に依存できない

pathを分ければセキュアになるわけではないと書いてあります。
(僕は当初pathを厳密に分けるべきだと思ってました。)

Domain跨ぎでCookie送信先を決めるためには Path=/ を指定しておくと www のサブドメインでも admin のサブドメインでも両方でCookieを共有できます。

まとめ

知識があやふやな状態だったので一度ちゃんと見てみました。
HTTPの仕様に困ったらちゃんとrfcまで立ち戻って見返すことが大事です。