WEB+DB PRESS誌のVol.37に「携帯サイト開発 実践テクニック 2007」という記事が掲載されているのだが、そこにこんな記述があった。
端末認証
登録が必要なサイトの場合,利用する際にはログインが必要です.ID/パスワードを毎回入力するのでは,携帯の場合では特に面倒です.
そこで携帯ならではの認証方法として,現在の端末では取得が容易にできる端末自体の情報(端末ID)を利用します.
(略)
セッション
PCサイトでセッションを使う場合は,通常セッションIDをCookieに保存しますが,携帯ブラウザではCookieにデータを保存することができません.そこで携帯サイトでCookieを使う場合はURLにセッションIDを埋め込むことになります.
セッションIDをGETで渡す
セッションIDをGETで渡す場合は,PHPの設定ファイルを更新するだけでできます.具体的には(略)
携帯サイトでセッションを使うときの注意点
携帯ブラウザの場合,Cookieを使うことができませんので,セッションを使う際はどうしてもURLにセッションIDが含まれてしまいます.URLにセッションIDが含まれる場合はセキュリティに注意する必要があります.
本人以外がセッション付きのURLにアクセスできないようにしましょう.特に検索サービスにクロールされてしまうと問題は深刻です.個人情報が簡単に検索できてしまいます.
そのため,セッションには必ず端末IDを保存しておいて,特定の端末のみアクセスできるようにしておきましょう.(略)セッションに格納されている端末IDと照合することで,違う端末からのアクセスをチェックすることができます.
携帯サイト開発 実践テクニック 2007, 技術評論社 WEB+DB PRESS Vol.37, pp.126-127
おいおい、それは駄目だろう*1。
なぜ「URLにセッションIDが含まれる場合はセキュリティに注意する必要があり」なのかと言えば、Refererによってリンク先にセッションID入りのURLが流出し、流出先サイトの人にセッションハイジャックされてしまうからだ。
一方、「端末ID」とは、たとえばこのサイト「携帯端末の個体識別情報(uid)取得方法」などに書かれているように、単にHTTPのリクエストヘッダに利用者に固有の固定のID文字列が載せられているだけのものだ。
リンク先のWebサイトには、Refererと共に端末IDもリクエストヘッダとして送信されているわけで、セッションID入りURLと端末IDがセットで流出するのだから、当然、同じHTTPリクエストを送るだけの方法でなりすましアクセスされてしまう。
そもそも、「ID/パスワードを毎回入力するのでは携帯の場合では特に面倒です」などといって、端末IDをパスワード代わりにしてはいけない。端末IDは他のサイトにも同じものが送信されるのだから、パスワード代わりになどならない。
こんな基本的なことが携帯業界では未だ常識になっていないようで困ったことだ。
携帯電話Webアプリのセキュリティが怪しいという話はいろいろな人から耳にするが、携帯の世界では秘密保持契約による縛りがあって、皆それらを話せない状態になっているようだ。その結果として、脆弱性の実態が明らかにならないばかりか、正しい実装方法の普及が進まない。
携帯電話の世界は通信事業者の私的なネットワークだと見なせば、秘密主義によるセキュリティ確保という選択も、事業者の自由だと言われればまあそうなのだろう。だが、その場合は、セキュリティ事故について通信事業者が責任を負うことになるのではないか。
逆に責任を負うつもりがないのであれば、セキュリティを確保するのに必要な情報を通信事業者が公式情報として明確に公表しておくか、さもなくば、それらの情報が秘密保持契約における秘密に当たらないことを契約者に対して明らかにするべきだろう。
*1 キャリアのIPアドレスからのアクセスであることの確認の話は書かれていない。(IPアドレスを確認すればそれで本当になりすまし不可能にできるのかは知らない。それは携帯電話事業者が公式に示すべきことだ。)