| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
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 ご指..
- http://www.ideaxidea.com/archives/2008/10/php_1.ht... ×265
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/ ×151
- http://ideaup.seesaa.net/article/108141154.html ×135
- http://phpspot.org/blog/archives/2008/10/20081016.... ×124
- http://b.hatena.ne.jp/HiromitsuTakagi/ ×110
- http://www.tokumaru.org/ ×95
- http://bakera.jp/ebi/topic/3295 ×87
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×74
- http://bakera.jp/ebi ×68
- http://www.ideaxidea.com/ ×56
- http://b.hatena.ne.jp/hotentry? ×31
- http://b.hatena.ne.jp/HiromitsuTakagi/20081016 ×27
- http://memo.hirosiki.jp/article/108099626.html ×25
- http://www.tokumaru.org/JavaScript/ ×18
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/200... ×16
- http://yamagata.int21h.jp/d/ ×12
- http://b.hatena.ne.jp/hotentry?mode=daily&date=200... ×12
- http://b.hatena.ne.jp/hotentry?cname=web ×12
- http://okyuu.com/ja/tips/986 ×11
- http://memo.hirosiki.jp/ ×11
- http://www.hash-c.co.jp/ ×10
- http://codezine.jp/bookmark/ ×10
- http://d.hatena.ne.jp/ockeghem/ ×10
- http://d.hatena.ne.jp/ockeghem/20080622/p1 ×10
- http://bakera.jp/ebi/topic/3217 ×8
- http://news.qooqle.jp/ ×8
- http://www.mixclips.org/ ×7
- http://b.hatena.ne.jp/t/php ×7
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×7
- http://d.hatena.ne.jp/ockeghem/searchdiary?word=SQ... ×6
- http://d.hatena.ne.jp/ockeghem/20071010/1192009917... ×6
- http://okyuu.com/ja/tips/2803 ×6
- http://okyuu.com/ja/tips/1546 ×6
- http://bakera.jp/ebi/topic/2986 ×6
- http://okyuu.com/ja/tips/3484 ×5
- http://www.tokumaru.org/d/20070821.html ×5
- http://d.hatena.ne.jp/fmaction/20081016/1224118316... ×5
- http://labo.shimi-zoo.com/?q=node/32 ×5
- http://www.tokumaru.org/d/20071210.html ×5
- http://www.tokumaru.org ×5
- http://www.tokumaru.org/d/20080502.html ×4
- http://d.hatena.ne.jp/f-star/ ×4
- http://blog.ohgaki.net/php-session ×4
- http://labs.cybozu.co.jp/blog/takesako/2007/08/lls... ×4
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×4
- http://img.simpleapi.net/ ×4
- http://buzzurl.jp/entry/徳丸浩の日記 - 書籍「PHP×携帯サイト デベロッ... ×4
- http://b.hatena.ne.jp/HiromitsuTakagi/?of=40 ×4
- http://blog.ohgaki.net/-13 ×4
- http://www.hash-c.co.jp/d/ ×4
- http://b.hatena.ne.jp/entrylist?url=http://&thresh... ×4
- http://b.hatena.ne.jp/HiromitsuTakagi/?of=20 ×4
- http://www.tokumaru.org/d/20070924.html ×4
- http://b.hatena.ne.jp/shimi-zoo/ ×3
- http://b.hatena.ne.jp/ockeghem/ ×3
- http://www.tokumaru.org/d/20070829.html ×3
- http://buzzurl.jp/entry/http://www.tokumaru.org/d/... ×3
- http://b.hatena.ne.jp/entry/http://ukstudio.jp/200... ×3
- http://b.hatena.ne.jp/entry/http://www.sbcr.jp/boo... ×3
- http://tokumaru.org/d/20080601.html ×3
- http://security.c-inf.com/index.php?Cross Site Scr... ×3
- http://takagi-hiromitsu.jp/diary/200806.html ×3
- http://codezine.jp/bookmark/?dt=20081015 ×3
- http://takagi-hiromitsu.jp/diary/20070223.html ×3
- http://www.tokumaru.org/d/20080822.html ×3
- http://d.hatena.ne.jp/f-star/20081016/p16 ×3
- http://clip.nifty.com/entry/531e0f11b3b826fcfe8655... ×3
- http://b.hatena.ne.jp/entrylist?url=http://&sort=h... ×3
- http://www.tokumaru.org/d/20070807.html ×3
- http://www.kt.rim.or.jp/~kbk/zakkicho/index.html ×3
- http://b.hatena.ne.jp/hotentry/ ×3
- http://snowland.net/nucleus/item/2073 ×3
- http://d.hatena.ne.jp/teracc/20080914 ×3
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×3
- http://playet.jugem.jp/ ×2
- http://www.tokumaru.org/d/20080820.html ×2
- http://koteitan.seesaa.net/article/95301330.html ×2
- http://s.luna.tv/search.aspx?client=lunascape&s=0&... ×2
- http://www.tokumaru.org/d/20080602.html ×2
- http://www.tokumaru.org/d/20070915.html ×2
- http://img.simpleapi.net/news/20081015/ ×2
- http://snowland.net/nucleus/blog/1 ×2
- http://yodobashi.tistory.com/48?srchid=BR1http://y... ×2
- http://mgw.hatena.ne.jp/?url=http://www.tokumaru.o... ×2
- http://www.tokumaru.org/d/20071205.html ×2
- http://r.hatena.ne.jp/fm8002/セキュリティ関係/ ×2
- http://www.tokumaru.org/d/20070716.html ×2
- http://okyuu.com/en/tips/986 ×2
- http://labs.ceek.jp/hbnews/list.cgi?p=0&c=1 ×2
- http://www.tokumaru.org/d/20071126.html ×2
- http://r.hatena.ne.jp/oldriver/ ×2
- http://sbm.webcreativepark.net/ ×2
- http://www.tokumaru.org/d/20070604.html ×2
- http://playet.jugem.jp/?eid=108 ×2
- http://www.tokumaru.org/d/20070717.html ×2
- http://search.live.com/results.aspx?q=javascriptエス... ×2
- http://reader.livedoor.com/subscribe/http://www.to... ×2
- http://r.hatena.ne.jp/pero1/セキュリティ/ ×2
- http://yamagata.int21h.jp/d/?date=20081015 ×2
- http://zapanet.info/new/hatebu/ ×2
- PHP×携帯サイト デベロッパーズバイブル ×29 / javascript break ×18 / キーワード不明 ×16 / 携帯サイト 書籍 ×7 / mod_imagefight ×6 / GIF画像 スプリクト埋め込み ×5 / javascript scriptエスケープ プログラム ×5 / sql エスケープ シングル ×4 / DNS rebinding ×4 / waf ×4 / SQL escape ×4 / 携帯サイト 開発 セキュリティ対策 ×4 / 画像 スクリプト 埋め込み 対策 ×4 / javascript ラベル ×4 / 携帯メールアドレス 管理 認証 PHP ×3 / sqlインジェクション sqlserver セミコロン ×3 / IEEE754 有効桁数 ×3 / Javascript break; ×3 / oracle sqlserver 脆弱 ×3 / WAF 書籍 ×3 / PHP×携帯サイトデベロッパーズバイブル ×3 / SQLserver 暗黙の型変換 パフォーマンス インデックス ×3 / php 文字数チェック 全否定 ×3 / sql バックスラッシュ エスケープ ×3 / php 携帯 開発 ×2 / php 携帯サイト ログイン情報 ×2 / php かんたんログイン ×2 / 佐名木 智貴 ×2 / PHP 携帯 書籍 ×2 / sql injection エスケープ ×2 / 携帯サイト セキュリティ xss ×2 / javascript ループ 抜ける ×2 / XSS対策 ×2 / sql update 型変換 ×2 / SQL エスケープ oracle ×2 / WAF ×2 / SQL インジェクション 対策 ×2 / PHP 携帯 デベロッパーズ ×2 / sql 正規表現 LIKE エスケープ ×2 / php セッション セキュリティ ×2 / SQLインジェクション 対策 数値 ×2 / 個体識別 脆弱性 ×2 / sql server 文字列エスケープ ×2 / SQL ×2 / docomo セッション php ×2 / 携帯 セッション php ×2 / pgpp ×2 / 徳丸浩 ×2 / SQL文の組み立てにバインド機構を使用している。 ×2 / php pg_escape_string バインド ×2 / 携帯 サイト セキュリティ ×2 / ホワイトリスト形式 ×2 / 携帯サイト sql ×2 / ワイルドアームズ F 基本操作 ×2 / XSS ブラックリスト方式 ×2 / sql server エスケープ ×2 / JavaScript break ×2 / 携帯サイトのセキュリティ ×2 / javascript switch ×2 / waf cookie ×2 / sql リテラル 一重引用符 ×2 / perl postgres エスケープ処理 ×2 / バリデーション ホワイトリスト ×2 / 画像 クロスサイト 埋め込み ×2 / エスケープ キャラクター % DB2 ×2 / session_set_save_handler ×2 / session_set_save_handler SESSION変数 ×2 / php 末尾 エスケープ ×2 / au ssl セッション ×2 / 携帯 セッション 個体識別 ×2 / mysql セミコロン 複数 SQL 同時 実行 ×2 / session_set_save_handler gc ×2 / php session_set_save_handler ×2 / PHP デベロッパーズ ×2 / DNS Rebinding ×2 / SQL エスケープ インジェクション ×2 / 複文SQL ×2 / 携帯サイト ログイン ×2 / MYSQL where 無視 数値以外 ×2 / オラクル 入力チェック シングルクォート ダブルクォート ×2 / SQLインジェクション 対策 ×2 / session adaption ×2 / SQLインジェクション 対策 サニタイジング 変数 演算結果 ×2 / 暗黙の変換 SQL ×2 / db2 エスケープ文字 ×2 / PHP 携帯 固体識別番号 ログイン状態の維持 ×2 / sql エスケープ ×2 / php 日記 ×2 / 携帯個体番号 認証 ログイン スプリクト ×2 / sql escape ×1 / PHP×携帯サイト ×1 / perl sql エスケープ ×1 / セッション WAF ×1 / update 複文 ×1 / SQL インジェクション対策 ×1 / JavaScript 画像ファイル ダウンロード ×1 / php 携帯 アクセス 制限 ×1 / sql % エスケープ ×1 / CSRF WAF ×1 / php エスケープ ホワイトリスト ×1
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
以下のように全く書いていないという訳ではないですが、書いてある位置が実際に影響のある機能の章とかけ離れていたり、問題があるということが曖昧に示されているだけにとどまっています。これでセキュリティ的な知識を持っていない人に理解しろと言うのは無理というものでしょう。せめて詳しいことは他の資料を見てくださいみたいな事が書いてあればよかったのですが。
P.64
--------------------
3-9-1 なぜアクセス制限を行うのか
携帯サイトでアクセス制限を行う理由はいくつかありますが、大別して2つの目的があります。
・対応していないキャリア/端末で表示させないようにしたい
・ユーザーエージェント偽装などによるセキュリティ対策
--------------------
P.266
--------------------
○セッション管理のセキュリティ
URLにセッションIDを付与する方法は、セキュリティ上安心とは言えません。そのため、セッション時間をできるだけ短くし、早めにセッション情報を破棄したり、アクセスしているキャリアなどを判別し、不正なセッションIDを利用させないといった対策をとって行くことが肝心です。
--------------------
ちなみに携帯端末ではセキュリティに配慮したばっかりに嵌まる罠というのが色々あってなかなか面白いです。Softbank端末でhttpsでUTF-8なページの絵文字が化けるとか、auではセッション限りのクッキーがいつまで経っても有効とか、クッキーに対応していないけどSSL通信できるau端末ではhttpsの場合だけクッキーが来ないとか。