ページ

2009年8月12日水曜日

WebKit を使ったアプリケーションはクッキーを共有する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

WPSU を作っていて気になったことがある。
WPSU を使って Googleを開くとログインしたはずが無いのに、ログイン状態で表示される。


(右上にメールアドレスが記載)


普段 Safari でこのアカウントを使っているのだが、
もしやクッキーは WebKitを使ったアプリケーションで共有されている?

Safariを開きログイン状態であることを確認した後、試しに WPSUでログアウトしてみると Safariの方でもログアウト状態になっていた。おおなんてこった。これってまずくないのか?

WebKitにはクッキーを扱うクラスは見つからなかった。Foundation.framework を調べると NSHTTPCookieStorage というクラスが見つかった。キャッシュの時と同様 Foundation.framework で管理されているようだ。

ADC - NSHTTPCookieStorage Class Reference

Overview には、はっきりと "a singleton object (shared instance)" と書かれている。



サンプルを作って動作を見てみる。

サンプル:CookieStudy.zip


-[NSHTTPCookieStorage cookies]の結果をデバッガコンソールへ吐き出してみよう。
コードはこんな感じ。

@implementation AppController

- (void)awakeFromNib
{
NSHTTPCookieStorage* cookie_storage =
[NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* cookies = [cookie_storage cookies];

NSLog(@"%@", cookies);
}

@end


実行するとでるわでるわ、すべてのクッキーが表示された。


表示内容はこんな感じ。
<NSHTTPCookie version:0 name:@"__utmz" value:@"1981754.1243.1.1.utmcsr=google.co.jp/"
expiresDate:@"2010-01-13 00:40:03 +0900"
created:@"2692303.4789"
sessionOnly:FALSE
domain:@".deep.csi.com"
path:@"/"
secure:FALSE
comment:@"(null)"
commentURL:@"(null)"
portList:(null)>

※一部値を改変

- - - -
悪意のある WebKitアプリケーションがクッキー情報を好きにできるってことか。
と思ったりもしたが、
この件に限らず悪意のあるプログラムを走らせたら何でもできるという点で特別問題視する事でもないか。

ただ異なるブラウザ間でログイン状態が共有されるのはあまり気持ちのよい状況ではないな。