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まで立ち戻って見返すことが大事です。