Internet Explorer 8 の開発者ツールは有効期限が「このセッションの終了」のcookieのドメインを正しく表示しない 不具合があるようです。 20100829追記: 現在テスト環境でexample.co.jpなドメインと簡単なスクリプトによる再現を確認しました。この問題はサイボウズofficeに由来するものではありません。またco.jpを範囲とするcookieが実際に存在するわけではないようです。IE8の開発者ツールの表示上の問題のようですが、不思議な種類のバグなので他に何か私の気づかない問題があるのかもしれません。 このページでは問題の発生する例としてサイボウズ社の製品・サイトを挙げていますがそれらに本当の原因があるという可能性は非常に低いと考えています。たまたま気づいたのと、他の人も試せるパブリックなサイトであるので社名等伏せず記述しています。 cookie monster あるいは 偽cookie monster 問題 †Internet Explorer 8 でグループウェアのサイボウズOffice8のオンラインデモにログインすると ドメインを .co.jp とするクッキーが発行されているように見える。 このようなcookieはcookie monsterという通称で呼ばれセキュリティ上の問題がある。 再現 †http://products.cybozu.co.jp/office/ver8/trial/demo/ から規約に同意してデモサイトで"高橋 健太"でログイン。IE8の開発者ツール(F12、あるいは メニュー [ツール]→[開発者ツール]を開きメニュー[キャッシュ]→[Cookie情報を表示する] Cookie Information - http://onlinedemo.cybozu.co.jp/scripts/office8/ag.exe? (略) NAME AGSESSID VALUE 01(略)a5 DOMAIN .co.jp PATH / EXPIRES At the end of the Session NAME CB_CLOGIN VALUE tPb(略)Yv DOMAIN .co.jp PATH / EXPIRES At the end of the Session NAME __utmc VALUE 11(略)93 DOMAIN .co.jp PATH / EXPIRES At the end of the Session 再現2 †ローカルのdnsサーバで以下のレコードを用意した。 example.co.jp. 3600 IN A 192.0.2.1 www.example.co.jp. 3600 IN A 192.0.2.1 example2.co.jp. 3600 IN A 192.0.2.1 www.example2.co.jp. 3600 IN A 192.0.2.1 それぞれのサーバー上でテスト用のスクリプトを用意した。 set.php: cookieをセットするphpプログラム <? setcookie('COJP', 'testValue',time()+3600, '/', '.co.jp'); setcookie('EXAMPLECOJP', 'testValue',time()+3600, '/', '.example.co.jp'); setcookie('WWWEXAMPLECOJP', 'testValue',time()+3600, '/', '.www.example.co.jp'); setcookie('NODOMAIN', 'testValue', time()+3600, '/' ); setcookie('COJP-sess', 'testValue',0, '/', '.co.jp'); setcookie('EXAMPLECOJP-sess', 'testValue',0, '/', '.example.co.jp'); setcookie('WWWEXAMPLECOJP-sess', 'testValue',0, '/', '.www.example.co.jp'); setcookie('NODOMAIN-sess', 'testValue', 0, '/' ); ?> <html> <body> <pre> setcookie('COJP', 'testValue',time()+3600, '/', '.co.jp'); setcookie('EXAMPLECOJP', 'testValue',time()+3600, '/', '.example.co.jp'); setcookie('WWWEXAMPLECOJP', 'testValue',time()+3600, '/', '.www.example.co.jp'); setcookie('NODOMAIN', 'testValue', time()+3600, '/' ); setcookie('COJP-sess', 'testValue',0, '/', '.co.jp'); setcookie('EXAMPLECOJP-sess', 'testValue',0, '/', '.example.co.jp'); setcookie('WWWEXAMPLECOJP-sess', 'testValue',0, '/', '.www.example.co.jp'); setcookie('NODOMAIN-sess', 'testValue', 0, '/' ); </pre> <? print_r($_COOKIE);; ?> </body> </html> show.php クッキーを表示するphpスクリプト。 <html> <body> <? print_r($_COOKIE);; ?> </body> </html> 以上のようなスクリプトを用いて以下のことを確認した。
本当にcookieモンスターか? †サイボウズのオンラインデモをfirefoxで利用した場合にはCB_CLOGINはdomain=.cybozu.co.jp としてSet-Cookieされていた。(LiveHttpHeadersで確認) AGSESSID,AGLOGINIDはdomain指定なしだがブラウザはonlinedemo.cybozu.co.jpドメイン指定として扱っている。([ツール]→[オプション]プライバシータブの「Cookieを表示」で確認) またIE8がやりとりするパケットレベルでみてもSet-Cookieする際はdomain=.cybozu.co.jp あるいはdomain指定なしであった。 Set-Cookie: AGSESSID=01(略)a5; path=/scripts/office8/ Set-Cookie: AGLOGINID=17; expires=xxx, dd-MMM-yyyy hh:mm:ss GMT; path=/scripts/office8/ Set-Cookie: CB_CLOGIN=Nui(略)CF; path=/; domain=.cybozu.co.jp 以下の可能性がある。
もっと調べるには? †EXAMPLE.co.jp なサイトをでっち上げて domain=.co.jp なcookieをブラウザに食べさせられるか試す。実際に*.co.jpなドメインを持つ必要はなくローカルなdnsにゾーンをたてるかクライアントPCのhosts(windowsだと $WINDOWS/system32/drivers/etc/hosts)をいじればよい。 ここまで書いてもう誰か調べてるはずだからなぁと思い以下略… 追記: AGLOGINIDはmonsterなcookieではなくDOMAIN=onlinedemo.cybozu.co.jpとして表示されていた。有効期限が指定無しなcookieをIE8が間違ってあつかってるのかなぁ。開発者ツールの表示の問題なのか、あるいは本当に間違って扱ってるのか。後者ならちょっと問題だなぁ。 環境 Windows XP SP3 IE8 バージョン 8.0.6001.18702 カウンター(今日/合計) = 1 /4150 |