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>

以上のようなスクリプトを用いて以下のことを確認した。

  1. 「開発者ツール」上domain co.jp なcookieが表示されること。
  2. www.example.co.jpで発行された(表示上の).co.jpなcookieが www.example2.co.jp, example2.co.jp には送信されないこと。

本当に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

以下の可能性がある。

  • 開発者ツールの表示が間違っている
  • サイボウズoffice8(あるいは何)はjavascript等でcookieを操作してcookie monsterを作っている
  • Internet Explorer8のバグ

もっと調べるには?

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


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-16 (月) 12:37:33 (4491d)