以下、問題に関しての参考サイト。
ke-tai.org - PHPで携帯からセッションを使う場合の設定方法maru.cc@はてな - auのSSLでcookieの挙動がおかしいmaru.cc@はてな - au、SoftBankでSSLでCookieセッションを使用する場合の問題点[DoCoMo]DoCoMoの端末はCookieが使えないので、セッションを使うには必然的にApacheのsession.use_trans_sidを使う事になる
(URLの中にセッションIDを埋め込む方式)。
この時問題になるのは2点。
まずURLの流出によるセッションハイジャック。携帯はPCに比べ、この問題が表面化しやすい。これは、友達にサイトを教えようと今見ているページのURLをそのままメールで送る、といったケースが決して珍しくないためだ
(それ用の機能が用意されている端末まである)。友人間ならば、悪意を持った攻撃者にジャックされた場合に比べリスクは低いかもしれないが、決して無視できる問題ではない。
(そういえばDoCoMoの端末がRefererを送信しないのは、セッションIDの流出を考慮しての事なんだろうか…?)2つめは、HTTPとHTTPS
(SSL)をまたいで通信する場合、セッションが切れてしまう問題だ。session.use_trans_sidは、同サイト内リンクにはセッションIDを付加するが、外部サイトには付加しない
(セキュリティ面から考えれば当然)のであるが、HTTPページからHTTPSページにリンクした場合、外部サイトとみなされセッションIDが付加されないのである。対処自体は難しくなく、手動でセッションIDを付加してやればいいのだが、こういった例外処置はバグの元となるため注意が必要だ。
これらの問題に対しセキュリティを強化しようにも、DoCoMoは端末IDが簡単に取得できなかったため難しい状況が続いていたが、2008/3/31よりiモードIDが導入された事である程度改善された
(GETパラメータの付加が必要なのと、SSLページでは使えない欠陥を抱えている)。
[AU,SoftBank]AUとSoftBankはCookieが使える
(端末が多い)ため、DoCoMoに比べて通常は特に何も考慮せずともセッションを使うことができる。
やっかいなのは、やはりこちらもHTTPSの絡むケースだ。せっかく使えるCookieだが、そのCookieに、HTTPとHTTPS
にまたいだ通信において問題が発生する。具体的な症状は、前出のmaru.cc氏の記事が詳しいのでそちらに譲るが、大雑把にまとめるとSoftBankはHTTP-HTTPS間でCookieが維持できず、AUは維持できるものの使用に関していくつか問題が起きるというものだ。対処法としては、全ページをHTTPかHTTPSに統一する、もしくはHTTP-HTTPS間移動時にPOST等でセッションIDを引き渡す、といった所か。後者で対処する場合、デザイン等の制約によりGETを使おうものなら、セッションハイジャック問題の再来だ。頭が痛い。
この状況を見ると、HTTPとHTTPSをまたぐ通信でセッションをきちんと維持するには、キャリア毎に複雑な対処が必要なようである。ただでさえ3キャリア対応のサイト構築には考慮しなければならない点が多いのに、さらにこのセッション事情が加わってくると正直気が滅入ってしまう。
実際のサービスではどうなのだろうかと、携帯ユーザーが多く個人情報も扱う大手サイトということでmixiを見てみたが、SSLは使われていなかった。こちらは具体的な個人情報を扱わないが、モバゲーもHTTPのみだった。
反対にきっちりSSLを使っていたのはgoogle。ログイン画面全般やGMAILにはSSLが使われていた。DoCoMoはやはりURLにセッションIDらしき物を持ち、AUとSoftBankはCookieが使われていた。しかしCookieや端末IDの取得に制約のあるDoCoMoは、一部サービスにログイン機能が提供されておらず、ログイン画面があっても「次回からログインを省略する」機能は付いていなかった。AU、SoftBankはログイン時、何度もリダイレクトがかかり、詳しく処理を追いかける事はできなかったが何らかの方法でセッションの引き継ぎが行われているようだった。端末IDの通知を拒否にしてもログインできたので、GETかURL埋め込みだと思われるが…
(端末ID通知とCookie両方切るとさすがにログインできなかった)。
時間がないので今日調べられたのはここまで。とりあえず、DoCoMo用とAU&SoftBank用の2種類の対応をしている印象を受けた。
しかしながらPCからのアクセスを拒否しているサイトは、市販の端末では通信が覗けないため解析が難しい
(製造メーカーやソノ手の人間なら、開発機やハック端末を持っているのだろうけど)。少なくともPC拒否はシステムの解析・攻撃の敷居を上げるという事は身にしみた。