たまに誤解があるようですが、Cookieを設定する場合のDomain属性は *設定しない* のがもっとも安全です。以下、例示により説明します。
# このエントリは、はてなダイアリーの過去のエントリからの転載です
# このエントリは、はてなダイアリーの過去のエントリからの転載です
Set-Cookie: SESS1=F3B435; Set-Cookie: SESS2=2A9E86; Domain=example.com;
すなわち、Domain=example.comを指定したCookieは、www.example.comにも送信されます。Domain属性を指定しないCookieは、example.comに送信され、www.example.comには送信されません。
これは、CookieのRFC2965(旧規格)、RFC6265(現規格)には明確に記述されています。
3.3.1 【中略】Domain Defaults to the effective request-host. (Note that because there is no dot at the beginning of effective request-host, the default Domain can only domain-match itself.)http://www.ietf.org/rfc/rfc2965.txt
4.1.2.3. The Domain Attribute【中略】If the server omits the Domain attribute, the user agent will return the cookie only to the origin server.http://www.ietf.org/rfc/rfc6265.txt
IE9 | サブドメインにも送信される |
Firefox 7.0.1 | RFC6265通り |
Google Chrome 14.0.835.202 | RFC6265通り |
Safari 5.1 | RFC6265通り |
Opera 11.51 | RFC6265通り |
iモード(P-07A) | サブドメインにも送信される |
Android 2.3.3 | RFC6265通り |
Cookieを発行する際に与える属性には次のような注意を払う。例× Set-Cookie: name=value; domain=example.jp; ...◎ Set-Cookie: name=value; domain=foods.onlineshop.example.jp; ...http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/302.html
「階層深く」というあたりが妙な表現ですが、いずれの場合でもDomain属性を指定しない状態が、Cookieの送信先を限定できるという意味で一番安全です。
ところで、この文書、色々妙なことが書いてあります。続きを引用します。
・path={サイト内のパスのプレフィクス}加えて、末尾には / を付けるようにする。例× Set-Cookie: name=value; domain=...; path=/△ Set-Cookie: name=value; domain=...; path=/application5/section3◎ Set-Cookie: name=value; domain=...; path=/application5/section3/http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/302.html
引用した文書は、セッションハイジャック防止という文脈で書かれているのですが、その場合、CookieのPath属性を指定しても意味がないことが知られています。詳しくは、高木浩光@自宅の日記 - 共用SSLサーバの危険性が理解されていないをご覧ください。
また、(Pathの)「末尾には / を付けるようにする」というのも変です。CookieのRFCにはこんな説明はありませんし、RFCで例示されているPath属性の例にも、末尾の / はありません。おそらく、Path=/fooと指定したCookieが /foobar というディレクトリにも送信されることを懸念しての指示だと思いますが、無用な懸念です。
まとめると、Domain属性とPath属性は以下の基準で判断します。
[注]
本エントリの記述内容は、すべて筆者の個人的見解であって、筆者の所属組織とは無関係です。
助かりました!!
返信削除