以下、例示により説明します。このエントリは、はてなダイアリーの過去のエントリからの転載ですexample.com上で稼働しているWebアプリケーションで以下の2種類のSet-Cookieについて比較します。Domain=example.com;SESS2の指定の方がドメインを明示しているので安全と思っている人がいるようですが、これは誤りです。Set-Cookieの際のDomain属性は、指定しない方が安全です。その理由は以下の通りです。Domain属性を指定しないCookieは、Cookieを発行したホストのみに送信されるDomain属性を指定したCookieは、指定のホストおよびそのサブドメインのホストに送信されるすなわち、Domain=example.comを指定したCookieは、www.example.comにも送信されます。Domain属性を指定しないCookieは、example.comに送信され、www.example.comには送信されません。これは、CookieのRFC2965(旧規格)、RFC6265(現規格)には明確に記述されています。server.http://www.ietf.org/rfc/rfc6265.txt実際のブラウザで調査したところ、Domain属性のないCookieの挙動は以下の結果となりました。RFC6265通りIEとiモードがRFCに準拠していませんが、その他のメジャーなブラウザはRFC通りの動作です。重大な問題とは言えませんが、RFC通りにしてもらいたいですね。ところで、冒頭で「たまに誤解がある」と書きましたので、ドヤ顔で「CookieはDomain属性を明示すべし」と解説した文書がないか検索してみましたら、ありましたね。Cookieを発行する際に与える属性には次のような注意を払う。・domain={Cookie返送先ドメイン}domain属性に複数のサーバが含まれるようなドメインを指定しない。ドメインを階層深く指定することでCookieを使用するサーバが限定されて他のサーバへの露出を避けることができる。...http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/302.html「階層深く」というあたりが妙な表現ですが、いずれの場合でもDomain属性を指定しない状態が、Cookieの送信先を限定できるという意味で一番安全です。ところで、この文書、色々妙なことが書いてあります。・path={サイト内のパスのプレフィクス}path属性に示されたパスのプレフィクスが同一サーバに同居している別のアプリケーションのリソースをカバーすることがないようにする。path=/application5/section3/http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/302.html引用した文書は、セッションハイジャック防止という文脈で書かれているのですが、その場合、CookieのPath属性を指定しても意味がないことが知られています。共用SSLサーバの危険性が理解されていないをご覧ください。付けるようにする」というのも変です。いうディレクトリにも送信されることを懸念しての指示だと思いますが、無用な懸念です。まとめると、Domain属性とPath属性は以下の基準で判断します。CookieのDomain属性は指定しないのがもっとも安全CookieのPath属性はセキュリティ上の効果はない[注]本エントリの記述内容は、すべて筆者の個人的見解であって、筆者の所属組織とは無関係です。