| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
2007-07-24 書評のお稽古
● 書評 - ウェブアプリケーションセキュリティ
金床氏の話題の新作「ウェブアプリケーションセキュリティ」が届いたので、ざっと目を通した。まだあまり紹介などが出ていないようなので、早い者勝ちで書評してみようと思う。
まず、本書の想定読者はどのような人だろうか。ウェプアプリケーションセキュリティの初心者でないことは確かだ。本書は内容にムラが多い。XSSや、CSRF、SQLインジェクション、セッション管理などについてはやたら詳しい代わりに、ディレクトリトラバーサル、コマンドインジェクション、ヘッダインジェクションについては「一応書いておかないとしょうがないな」と言わんばかりの薄っぺらさだ。この手の解説書の定番となってる強制ブラウジング、ディレクトリリスティングや、ファイルのダウンロードに伴う権限管理の問題などに至っては影も形もない。
ディレクトリリスティングなどを説明しないのは、おそらくこれらがアプリケーションの問題ではなく、主にWebサーバーの設定の問題(アプリケーションではなく)だからであろう。また、アクセス権限管理は狭義のWebアプリケーション脆弱性パターンには属さず、機能要件として取り扱うべきものであるからだろう。そう説明できる。
しかし、それにしてはSSLのMITM(Man In The Middle)攻撃については1章設けて説明している。これは通信の問題であって、アプリケーションの問題ではない。一見すると一貫性がないように見える。
しかしながら実は、このようなムラや矛盾こそが本書の魅力の根源となっているのだ。要するに、筆者は書きたいことを書きたいように書いたのだ。筆者が力瘤を入れて書いた章は(世の中の基準ではなく)筆者が重要だと思っている内容であるし、筆者が書かなかった内容は(世の中では重要とされていても)筆者には興味がない内容であるのだろう。
従って、本書はウェブアプリケーションセキュリティの網羅的な解説書ではない。
上級者を目指す中級者にとっては、本書はちょうど良い手引きになるだろう。本書にはほとんど図表がないが、上級者たるもの「絵がない」くらいでめげてはいけない。図がない代わりに、文章は平明であるし、画面キャプチャやプログラムリストは適切に挿入されている。内容の高度さに比べて理解は容易である。
上級者にとっては、二つの使い道がある。一つは、これまでネット上などで断片的に存在していた「高度な内容」をまとめ、読みやすい解説としたことである。そして、こちらの方が恐らく大切なのだろうが、金床節をたっぷりと味わうことである。典型的には、「2章データ処理の原則と指針」、「4章CSRF」、「6章SQLインジェクション」、「8章Guardian@JUMPERS.NET(筆者が開発したWAF)」、「16章DNSを使った攻撃」などである。
WAFだと?そう、本書の特徴の一つがWAFに対する解説である。オープンソースのWAF開発者ならではの視点で、WAFの可能性と限界についてたっぷり解説してくれる。その視点は新鮮でかつ誠実である。そのような態度は、以下に引用するような部分で顕著である。
WAFを使用しブラックリスト方式のシグネチャマッチングによってXSS対策を行う場合、攻撃を完全に防ぐことは不可能である。【中略】望ましい対策として、パラメータごとにホワイトリスト式のチェックを行う方法が考えられるが、残念ながら多くのウェブアプリケーションではホワイトリストをきちんと定義することが難しい【中略】従って、WAFを使ってXSS攻撃を完璧に防ぐことは期待できない(P92〜P94)。
SQLインジェクションについても、WAFによる完全な対策はできないと説明する。 一方、CSRFについてはどうか。
クロスサイトスクリプティングやSQLインジェクションと異なり、CSRFはWAFで確実な対策を行うことが可能だ。ここではWAF(Guardian@JUMPERS.NET)を用いたCSRF対策について具体的に説明する(P119)。
読者は、WAFを導入するとCSRF対策になるのだなと理解するであろう。
しかし、これは正確な理解ではない。正確には、CSRF対策をWAFによって行うことが技術的に可能であること、Guardian@JUMPERS.NETではそれを実現していること、の二点だ。すべてのWAFがCSRF対策を確実に行えるわけではない。金床氏の文章は前述のように読みやすいのだが、一部に誤解を与えかねないような表現が散見される。
引用した部分において誤解が生じた理由は明らかだ。この部分に至って、金床氏はWAFの開発者の視点で書いている。一般読者はWAFの利用者として読むであろう。そのギャップが誤解の元になるのだ。読者は、金床氏が今どの立場で解説しているかを意識するならば、誤解の余地はかなり減少するだろう。なんと言っても、元々は読みやすい文章なのだから。
なお、そろそろ本書の対策方針については一言いっておかなければならない。これは、世の中で言われているガイドラインとは異なっている。「入力時に型やサイズチェック、出力時にエスケープ」という世の中で普及したガイドラインを「原則ではない」と言い切る。実は仔細に読んで行くと、そう過激な主張とも言えない場合もあるのだが、それは読者の楽しみにとっておくことにしよう。
繰り返すが、本書は初心者向けの解説では決してなく、上級者が自身の楽しみに読むのが正しいと思う。であれば、箱入りであるとかハードカバーであることは決してデメリットではない。楽しい読み物として末永く楽しむべき本には、それにふさわしい体裁があるというものである。
さらに言えば、本書は「二冊目」として購入すべき本である。では、一冊目としてはどれを購入すればよいか。もちろん、評者の本「Webアプリケーションのセキュリティ完全対策―不正アクセスや情報漏洩を防ぐ」を購入せよといいたいところだが、あいにく時間の経過とともに内容が少し古くなってしまった。現時点で「一冊目」としての絶対のお勧めはない。どなたか書いていただけないものだろうか。
- http://www.tokumaru.org/ ×86
- http://d.hatena.ne.jp/teracc/20070715 ×22
- http://d.hatena.ne.jp/tessy/ ×20
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×15
- http://www.jumperz.net/index.php?i=4 ×11
- http://d.hatena.ne.jp/ockeghem/ ×9
- http://b.hatena.ne.jp/keyword/XSS ×8
- http://d.hatena.ne.jp/tessy/20070902/1188727522 ×7
- http://d.hatena.ne.jp/tessy/20070902 ×7
- http://d.hatena.ne.jp/teracc/ ×4
- http://b.hatena.ne.jp/Kanatoko/ ×4
- http://a.hatena.ne.jp/mao140/ ×4
- http://d.hatena.ne.jp/ockeghem/20070502/1178042280... ×4
- http://b.hatena.ne.jp/entry/5303987 ×4
- http://d.hatena.ne.jp/ockeghem/?of=5 ×3
- http://b.hatena.ne.jp/ockeghem/ ×3
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×3
- http://d.hatena.ne.jp/tessy/?of=5 ×3
- http://d.hatena.ne.jp/ockeghem/20070528 ×3
- http://a.hatena.ne.jp/ockeghem/ ×2
- http://avemaria.livedoor.biz/archives/50696168.htm... ×2
- http://d.hatena.ne.jp/tessy/?of=15 ×2
- http://www.tokumaru.org ×2
- http://d.hatena.ne.jp/ockeghem/20070528/1180387214... ×2
- http://d.hatena.ne.jp/teracc/comment?date=20070715... ×2
- http://s.luna.tv/search.aspx?q=CSRF セキュリティ&st=30&d... ×2
- http://b.hatena.ne.jp/keyword/IE ×2
- http://reader.livedoor.com/subscribe/http://www.to... ×2
- http://b.hatena.ne.jp/pero1/favorite?of=20 ×2
- http://b.hatena.ne.jp/mi1kman/favorite ×2
- http://b.hatena.ne.jp/ockeghem/favorite ×2
- http://a.hatena.ne.jp/ikepyon/ ×1
- http://www.jumperz.net/index.php?i=4&page=2&thread... ×1
- http://b.hatena.ne.jp/Kanatoko/favorite ×1
- http://d.hatena.ne.jp/niha/20070729 ×1
- http://209.85.175.104/search?q=cache:z5QWuD9c838J:... ×1
- http://b.hatena.ne.jp/ockeghem/金床/waf/ ×1
- http://www.math.sansu.org/u/diary/?date=200706 ×1
- http://d.hatena.ne.jp/tessy/?of=10 ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×1
- http://www.jumperz.net/index.php?i=6&threadId=5258... ×1
- http://reader.livedoor.com/subscribe/http://www.to... ×1
- http://search.live.com/results.aspx?q=ディレクトリリスティング... ×1
- http://labs.ceek.jp/hbnews/list.cgi?p=2&c=0 ×1
- http://www.tokumaru.org/d/20070724.html ×1
- http://clip.nifty.com/entry/a59bf3224009c0bff718ff... ×1
- http://b.hatena.ne.jp/keyword/クロスサイトスクリプティング ×1
- http://b.hatena.ne.jp/entrylist?url=http://&thresh... ×1
- http://www.tokumaru.org/index.htm ×1
- http://b.hatena.ne.jp/send/Security/ ×1
- http://tokumaru.org/ ×1
- http://del.icio.us/tessy/Application ×1
- http://search.www.infoseek.co.jp/Web?qt=DNSを使った攻撃&... ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=150&th... ×1
- http://www.megite.com/discover/book ×1
- http://b.hatena.ne.jp/send/?of=900 ×1
- http://www.math.sansu.org/u/diary/ ×1
- http://b.hatena.ne.jp/Kanatoko/20070725 ×1
- http://b.hatena.ne.jp/TAKESAKO/20070725 ×1
- http://b.hatena.ne.jp/ockeghem/20070725 ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×1
- http://b.hatena.ne.jp/t/tkmr ×1
- http://www.jumperz.net/index.php?i=4&page=1&thread... ×1
- http://tips.megite.com/discover/book ×1
- http://b.hatena.ne.jp/entrylist?url=http://www.tok... ×1
- http://d.hatena.ne.jp/tessy/200709 ×1
- http://search.live.com/spresults.aspx?q=52ビットの有効桁数... ×1
- http://209.85.175.104/search?q=cache:z5QWuD9c838J:... ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×1
- http://clip.livedoor.com/tag/画像 ×1
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×1
- http://209.85.175.104/search?q=cache:z5QWuD9c838J:... ×1
- http://b.hatena.ne.jp/Kanatoko/?of=40 ×1
- http://b.hatena.ne.jp/Kanatoko/?of=20 ×1
- http://b.hatena.ne.jp/t/cookie ×1
- http://b.hatena.ne.jp/pero1/favorite?of=40 ×1
- http://d.hatena.ne.jp/ockeghem/20070502 ×1
- ウェブアプリケーションセキュリティ ×41 / 徳丸 セキュリティ ×16 / ウェブアプリケーションセキュリティ 金床 ×15 / 金床 セキュリティ ×14 / 徳丸浩 ×10 / Webアプリケーションのセキュリティ完全対策 ×8 / 画像 xss ×6 / 画像 XSS ×6 / sql 数値型 囲む ×5 / Webアプリケーションのセキュリティ完全対策―不正アクセスや情報漏洩を防ぐ ×4 / キーワード不明 ×4 / ウェブアプリケーションセキュリティ 書評 ×3 / WAF CSRF ×3 / gif xss javascript ×3 / XSS ×2 / Webアプリケーション セキュリティ 完全対策 ×2 / 徳丸 金床 ×2 / 暗黙の型変換 Oracle ×2 / javascript テスト ×2 / 書評 ウェブアプリケーションセキュリティ ×2 / Webセキュリティ 金床 ×2 / Guardian WAF ×2 / WEBアプリケーションのセキュリティ完全対策 ×2 / "ケチ表現" ×2 / sql インジェクション XSS CSRF ×2 / CSRF WAF ×2 / JavaScript 倍数型浮動小数点数 範囲 ×2 / csrf対策 本 ×1 / 金床 ウェブアプリケーションセキュリティ ×1 / "セキュア" "ウェブアプリケーション" "WAF" ×1 / IEEE64bit浮動小数点数 ×1 / DNS攻撃について ×1 / webアプリケーションのセキュリティ完全対策 ×1 / ieee754 有効桁数 ×1 / ディレクトリリスティング 強制ブラウジング ×1 / WAF 金床 ×1 / WAF ×1 / Perl 型変換 数値型 ×1 / GIF XSS ×1 / oracle 暗黙の型変換 ×1 / perl 数字 判定 桁数 ×1 / sqlインジェクション 数値 ×1 / Guardian jumper's ×1 / php 小数点 範囲 ×1 / WAF ブラックリスト デメリット ×1 / セキュリティ アプリ ×1 / Webアプリケーションセキュリティ 金床 ×1 / web アプリケーション 完全対策 ×1 / IEEE754 ×1 / Webアプリケーションセキュリティ 徳丸 ×1 / 徳丸浩 脆弱性 本 ×1 / Webアプリケーションのセキュリティ完全対策 ×1 / ディレクトリ・トラバーサル ディレクトリ・リスティング ×1 / アプリケーション セキュリティ ×1 / ウェブアプリケーション セキュリティ ×1 / 徳丸 セキュリティ 画像XSS ×1 / 金床 ウェブ ×1 / XSS 2007 ×1 / CSRF 徳丸 ×1 / テスト 日記 ×1 / waf csrf ×1 / アプリケーション 権限管理 ×1 / FizzBuzz ×1 / WAF Guardian ×1 / KCCS WAF ×1 / 正規表現 負の数字 ×1 / waf CSRF ×1 / xss テスト ×1 / web 金床 ×1 / 金床 CSRF ×1 / 金床 WAF ×1 / IEEE754表現 ×1 / WAF セキュリティ ×1 / HTTPヘッダー インジェクション ruby ×1 / webアプリケーション セキュリティ 金床 ×1 / fizzbuzz ×1 / csrf waf ×1 / webアプリケーションのセキュリティ 完全対策 ×1 / ウェブアプリケーションセキュリテ ×1 / fizzbuzz ワンライナー ×1 / お稽古 ×1 / IE gif javascript 攻撃 ×1 / Webアプリケーションセキュリティ ×1 / 徳丸 浩 ×1 / ruby mail rss 変換 ×1 / waf guardian ×1 / SQL インジェクション 暗黙 型変換 ×1 / MITM的な手法 ×1 / ieee754 ×1 / 画像 javascript ×1 / IEEE-754 ×1 / WAF できない セキュリティ ×1 / CSRF対策 WAF ×1 / ieee754 浮動小数点数 ×1 / Webアプリケーションの「セキュリティ完全対策」 ×1 / 整数の範囲 ×1 / ウェブアプリケーションセキュリティ (ハードカバー) ×1 / セキュリティ 徳丸 ×1 / Guardian@JUMPERS.NET ×1 / 金床 sql ×1
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
言い出しっぺの法則(笑)>「一冊目」
改訂キボン>完全対策本
攻撃手法の解説書って必要ないというわけじゃないんでしょうけど、セキュアなアプリの開発手法の具体的な解説書の方がいいんじゃないかと思う今日この頃です。
sonodamさんがいいこと言った!
…しかし改訂じゃなくてフルスクラッチでお願いします。
皆さん、ありがとうございます。本は書きたいのだけれど、今忙しくて・・・金床さんだって会社経営の傍ら14ヶ月(だっけ?)かけて書いたわけだから書けない理由にはなんないんだけど。