[11/15] 他のブラウザの挙動について追記
OpenIDやSAMLなどのSSOシステムは対応するサービスも出揃い、一般化しているというほどではありませんが、あちこちで見かけるようになってきました。しかしこれらのSSOサービスをFirefoxで利用する場合には注意する必要があります。というのは、Firefoxには3年以上前にバグとして指摘されているにもかかわらず、放置され続けているセッションに関する仕様があるためです。
Session Restore remembers logins from session cookies
この仕様、当初はクラッシュ時のセッションリカバリの話ということで、べつにそれでいいんじゃない?という方向でいったん落ち着いたようです。
ところがその後、セッションリカバリ機能はこの仕様を残したまま、通常の終了・起動時における「前回終了時のウィンドウとタブを表示する」というオプションへと昇格してしまいました。
これはまずいと感じた人により、再びバグとして昨年7月に登録されていますが、セッションのリカバリ機能はそもそもそういうものだという意見もあり、修正されないまま今日に至っています。
"Save and Quit" tabs should not save session cookies of to-be-restored tabs
Firefoxの起動オプションとして「前回終了時のウィンドウとタブを表示する」を選択していると、ブラウザの終了時に破棄されるべき Max-Age(Expire)が省略されたクッキーが保存されてしまい、次回起動時にそうしたクッキーを使っているログインセッションが復活してしまうというものです。
例えば、適当なWebサービスで以下のような手順を踏むことで確認できます。
上記の例は、あくまで1つのサービスの中で起きる話でしたが、SSOが絡むと複数のサービスに認証無しでログインできてしまうようになります。
Firefoxのセッション管理機能は、ブラウザを閉じたときに開いていたサイトだけでなく、閉じる瞬間に開いていたウィンドウ、タブの履歴に含まれる全てのサイトについてもクッキーを保存するため、このような問題が生じます。
ちなみに、SSOに限らずいったん認証に成功した後、ログアウトせずにまったく関係の無い他のページに移った場合でもセッション情報は残るため、1つのウィンドウ(タブ)であちこち巡回すると、どこのサイトのセッション情報が残っているのか非常に分かりにくい仕様になっています。
この問題については、認証機能を含む1つのサービスであれば、サーバ側のセッションタイムアウトを適当な長さに設定することによりある程度は回避できます。ところが、SSOの認証サービスではそうは行かない事情があります。
SSOの利用シーンは、だいたい次のような手続きで進みます。
この時、ユーザーは大半の時間を4.のアプリケーション上で過ごすため、認証サービスから見た場合、ユーザーのアクセス間隔は極端に長くなります。このため、認証サービスではタイムアウトの設定が難しいのです。というより、SSOサービスはそもそも1度認証すれば対応する全てのサービスを使えるというのが売りのひとつなので、むしろタイムアウトを設けずに、ブラウザの終了時に認証セッションも終了するというのがいちばん理にかなった姿のように思います。
認証サービスのクッキーにsecure属性が付いてていれば、デフォルトの状態では問題ありません。ただ、私が調べたOpenID対応認証サービスではsecure属性が付いていないものがありました。
上で「デフォルトの状態では」と書きましたが、Firefoxではsecure属性の付いたクッキーも保存するオプションがあります。
上記設定でsecure属性がセットされているクッキーも保存されるようになり、SSLのログインセッションも保持されます。これはSSOに限らない話なので、非常に危険な設定です。
こんな設定をわざわざする人はいないだろうと思っていたのですが、この設定、クッキーだけでなくフォームの入力内容の保存オプションも兼ねており、某有名blog他で、blogの編集途中でもブラウザを閉じられる便利な設定例の一部として紹介されているため、そうとは知らずに設定してしまっている人が結構いるのではないかと心配しています。
仮にOS自体もオートログインの設定になっていると、こうした危険な設定の変更を防ぐ方法が無いというのも問題です。職場や学校などで、ちょっと席を外している間に設定を変えておき、ターゲットが帰った後にマシンを再起動して、じっくりと操作するといったことも可能になります。
ネットカフェやホテル等の設置端末はほとんど触ったことが無いのですが、Firefoxがインストールされていて、起動時に前回終了時っぽい画面が出てきたらかなり危険でしょう。
比較のため、IE(8.0.6001.18702)、Opera(10.01)、Safari(4.0.4)でセッションの復元がどうなっているか確認しました。まず、それぞれのブラウザでのセッションの復元設定については、以下のようになっています。
次にセッションの復元機能があるブラウザで、以下の手順によりセッションの復元がどのようになるか確認しました。
結果、ログインセッションが復元されたのはFirefoxだけでした。
ということで、Firefoxではログアウトせずにブラウザを閉じるような使い方をしていると危険です。SSOではログインしていなかったサービスにまで影響が及ぶため、この仕様が変更されるまでは注意する必要があるでしょう。
ユーザー側でできる対処として、以下が考えられます。
あとは
などでしょうか(^^;