2008-10-14 2008-10-14
●書籍「PHP×携帯サイト デベロッパーズバイブル」の脆弱性
「PHP×携帯サイト デベロッパーズバイブル」という携帯サイト開発のノウハウを解説した書籍が今月初頭に発売され、話題になっている。Amazonの「インターネット・Web開発」カテゴリで1位ということで、たいしたものだ。私も発売前から予約して購入した。
私がこの書籍を購入した動機は大きく二つある。一つは、携帯サイトの最新の開発ノウハウをまとめた書籍に対する期待をしていたということ。もう一つは、セキュリティに対する記述がどの程度あるのかを見てみたいというものだった。
このうち、前者については、期待は叶えられた。非常に盛りだくさんのテーマが手際よくまとめられていて、かつ読みやすい。あまり原理・理屈のことは書いていないが、開発現場では、コピペの情報源として重宝されることだろう。
しかし、問題はセキュリティについての記述である。
本社のサンプルをざっと眺めた限りでは、クロスサイトスクリプティング(XSS)やSQLインジェクションが問題になりそうなサンプルは見あたらなかった(DBは使用しておらず、表示は固定的なものが多いため)。一方、携帯向けWebアプリケーションのセキュリティ問題の定番である認証とセッション管理については問題がある。具体的には、本書の7章である。
著者のブログから、本書の7章の目次を引用する。
Chapter.7 ログイン状態の管理 7-1 本章のゴール 7-2 携帯を使ったログイン 7-2-1 IDとパスワードのログイン 7-2-2 個体識別情報によるログイン 7-3 個体識別情報を理解する 7-3-1 個体識別情報の種類 7-3-2 docomoの個体識別情報 7-3-3 auの個体識別情報 7-3-4 SoftBankの個体識別情報 7-4 ログイン状態を維持する方法 7-4-1 ログイン状態を維持するとは 7-4-2 携帯サイトでのセッション管理 7-5 かんたんログインを実装する
このうち、「7-4-2 携帯サイトでのセッション管理」と「7-5 かんたんログインを実装する」が問題である。
携帯サイトでのセッション管理については、Cookieを実装していないdocomoやSoftbankの一部の端末を考慮して、URLにセッションIDを付与するように説明している。これ自体は正しいのだが、URLにセッションIDを付与した場合のセキュリティ上の注意点が抜けている。既によく知られたことだが、セッションIDをURL上に保持した場合、HTTP Refererにより、他のドメインにセッションIDが漏洩する。また、ユーザの不注意により、セッションID付きのURLをソーシャルブックマークなどで公開したり、メールで知人に送信した結果、セッション情報が外部に漏洩するような事故が現実に発生している。
「かんたんログインを実装する」については、PCで個体識別番号やユーザエージェントを偽装することによる「なりすまし」対策について記述されていない。すなわち、PCからだと自ら収集するなどした個体識別情報により簡単になりすましができるので、ケータイのゲートウェイからのIPアドレスのみアクセスできるように限定しなければならないのだが、その説明が抜けている。
いや、厳密には、以下のように、7章の冒頭の図(本書P250から引用)を見ると、キャリアゲートウェイの「IPアドレスチェック」をせよと指示しているようにも受け取れるのだが、3章「キャリア/機種の判別」を読むと、キャリアの識別をする理由は、HTMLや画像の規格の違いを吸収して適切な表示を行うことが目的と説明されており、セキュリティに関する記述はない。そのため、IPアドレスのチェックが必須だとも書いていない。これでは、本書の読者の多くが、IPアドレス制限をかけないまま「かんたんログイン」機能を実装・公開する懸念がある。
「かんたんログイン」機能そのものは高木浩光氏によりセキュリティ上の問題が疑問視されている(無責任なキャリア様に群がるIDクレクレ乞食 ―― 退化してゆく日本のWeb開発者)のだが、そこで議論されている問題は、キャリアゲートウェイのIPアドレス情報が正しくサイト運営者に行き渡るのかという問題であって、本書のように、キャリアのゲートウェイの確認をしていないのは問題外といえよう。
本書が価値の高い情報を満載していて全体として価値の高い書籍であること、冒頭で述べたように多くの読者が購入しているだろうことを考えると、セキュリティに対する配慮の欠如を惜しむとともに、本書のコピペによる脆弱なサイトが乱造されることを強く懸念する次第である。
参考文献:
WASForum Conference 2008: 携帯電話向けWebのセキュリティ
携帯電話向けWebアプリの脆弱性事情はどうなっているのか
携帯電話向けWebアプリケーションのセッション管理手法
プログラミング解説書籍の脆弱性をどうするか
徳丸浩の日記 - 書籍「PHP×携帯サイト デベロッパーズバイブル」の脆弱性http://www.tokumaru.org/d/20081014.html#p01 火に弱い 水に濡らすと溶ける 床に転がしておくと、足の小指をぶつけて痛い   PHP×携帯サイト デベロッパーズバイブル
このブログでも以前ご紹介した本なので告知的にエントリー。脆弱性についての補足です。ことの経緯は次のような感じ。 「徳丸浩の日記 - 書籍「PHP×携帯サイト デベロッパーズバイブル」の脆弱性」にてセキュリティに関する指摘。 著者がブログでコメント。詳しくは「memokami..
「PHP x 携帯サイト デベロッパーズバイブル」に書かれている内容について、 セキュリティの点について徳丸浩様のサイトでご指摘を頂きました。 ■徳丸浩の日記 - 書籍「PHP×携帯サイト デベロッパーズバイブル」の脆弱性 http://www.tokumaru.org/d/20081014.html ご指..
最近購入したPHP×携帯サイト 実践アプリケーション集を読んでいて妙な感じがしたので、この感覚はなんだろうと思っていたら、その理由に気づいた。本書に出てくるアプリケーションは、PHPのセッション管理機構を使っていないのだ。そんな馬鹿なと思ったが、目次にも索引
以下のように全く書いていないという訳ではないですが、書いてある位置が実際に影響のある機能の章とかけ離れていたり、問題があるということが曖昧に示されているだけにとどまっています。これでセキュリティ的な知識を持っていない人に理解しろと言うのは無理というものでしょう。せめて詳しいことは他の資料を見てくださいみたいな事が書いてあればよかったのですが。<br><br>P.64<br>--------------------<br>3-9-1 なぜアクセス制限を行うのか<br><br>携帯サイトでアクセス制限を行う理由はいくつかありますが、大別して2つの目的があります。<br><br>・対応していないキャリア/端末で表示させないようにしたい<br>・ユーザーエージェント偽装などによるセキュリティ対策<br>--------------------<br><br>P.266<br>--------------------<br>○セッション管理のセキュリティ<br>URLにセッションIDを付与する方法は、セキュリティ上安心とは言えません。そのため、セッション時間をできるだけ短くし、早めにセッション情報を破棄したり、アクセスしているキャリアなどを判別し、不正なセッションIDを利用させないといった対策をとって行くことが肝心です。<br>--------------------<br><br>ちなみに携帯端末ではセキュリティに配慮したばっかりに嵌まる罠というのが色々あってなかなか面白いです。Softbank端末でhttpsでUTF-8なページの絵文字が化けるとか、auではセッション限りのクッキーがいつまで経っても有効とか、クッキーに対応していないけどSSL通信できるau端末ではhttpsの場合だけクッキーが来ないとか。