Set-Cookie: SESS1=F3B435;という応答が帰ってきた場合は、
Set-Cookie: SESS1=F3B435; Domain=example.com;と同じとみなされ、サブドメインにも送る。domain 属性を指定しない方が安全、ということはない。指定してもしなくても同じ。Netscape 規格に忠実に従っているのであれば、という注釈つきだけど。RFC6265 では確かに domain 指定がなかったらそのホストのみに送れ(サブドメインには送るな)と異なる動作を要求してるけど、上のような Set-Cookie の使い方では Netscape と RFC6265 のどっちに従うべきか判断できない(RFC2109、2965 でないことは判断できる)。 こちらではIEとiモードが RFC に従っていないとあるけど、デファクトスタンダードの Netscape 規格には正しく従った動作なので、これを責めるのは酷だろう。ってゆーか、RFC6265 以降でiモード新機種ってどんだけ出た? RFC6265 の方に従ってるように見える実装も、意図して RFC6265 に準拠したのではなく、独自に仕様をいじった結果として気がついたら RFC と同じになっていた、という程度なんじゃないかと思う(根拠なし)。 _ Netscape 規格がデファクトスタンダードなんだけど、それで不十分なところをブラウザ側で独自に制限を追加している例をいくつか挙げておく。 _ まさに cross domain cookie injection の対策に関する部分。こう書いてある。 Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: ".com", ".edu", and "va.us". Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT". ダサい。クソ。あまりにクソなので、これを忠実に実装してるブラウザは今ではほとんどない(まったくないわけではないが。w3m とか)。public suffix list はこのクソをある程度まともに使えるようにするものだけど、クソである理由の本質的なところには何ひとつ手をつけてないので、やっぱりクソ。ドメインの階層構造はそのドメインの管理主体を規定しないし、ドメインの管理主体が web コンテンツの管理主体と一致するという保証はどこにもないのに、それが一致するという前提で仕様を設計してるというのがそもそもの間違いなので、ここを直さないかぎりは何をやってもクソ。たしかに一致している例は多いので、一致しているとみなすのが蓋然性の高い推定であるのは事実だけど、どこまでいっても推定にしかすぎないのもまた事実。public suffix list なんてやっつけな対応ではなく、cookie の送信を許可するサイトを明示的に指定できるようにもっと根本的に仕様を見直さないとダメ。 _ Netscape 仕様への非準拠もうひとつ。 ︵Pathの︶﹁末尾には / を付けるようにする﹂というのも変です。CookieのRFCにはこんな説明はありませんし、RFCで例示されているPath属性の例にも、末尾の / はありません。おそらく、Path=/fooと指定したCookieが /foobar というディレクトリにも送信されることを懸念しての指示だと思いますが、無用な懸念です。 実際のところたいていのブラウザはそのように実装されてるんじゃないかと思うけど、Netscape 仕様には The path "/foo" would match "/foobar" and "/foo/bar.html". と明記されており、これに厳密に従うなら /foobar にも送られるのが正解。つまり、大部分の実装は Netscape 規格にあるとおりには動作していない。ただ、Netscape に忠実な実装が存在する可能性は否定できないので、path=/foo/ とするのは無用な懸念ではないだろう。妥当な配慮だと思う。 _ Internet のいろんな規格はとりあえず最新の RFC に従っておけばいいことが多いんだけど、こと cookie に関していえばそれは間違い。広く使われているのは RFC ではない文書にてきとーなアレンジを加えた明文化されていないナニモノか。わけわからんけど、残念ながらそれが実情。将来的には RFC6265 がその立場にとってかわることになるんだろうけれど、せっかく策定した RFC を完全にシカトした前歴が2回もあるので実際はどうなるんだか。少なくとも現時点では、Netscape 規格と RFC6265 で仕様が矛盾している箇所において、たった半年前に発行されたばかりの RFC に従った挙動になっていないからバグだ、と非難するのは適当ではないだろう(5年たってもまだ改まってないなら非難していいと思うけど)。仕様に互換性がないのを承知した上で、どちらでも安全に動くような方策を考えるべき。 _ ま、わしゃ RFC6265 もダメだと思ってるけど。