岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

第02回まっちゃ445勉強会に参加した

竹迫さん(id:TAKESAKO)によるmod_wafful話が聞けそうだ、ということで参加表明した勉強会。表明後、徳丸さん(id:ockeghem)・大垣さん・園田さん(id:sonodam)が登壇されることが決まり、願ってもない流れに。

勉強会開始直後は、知らない方(あるいは私が一方的に知っている方)ばかり60名の中、正直アウェー感を感じずにはいられなかったのですが、最終的には満足感・充実感でいっぱいになりました。スタッフの皆様、講師の皆様、参加者の皆様、本当にありがとうございます。

勉強会は4部構成でした。1部は自己紹介タイム、2部以降が本編です。

WAF入門 〜原理、効果、限界〜(徳丸さん)

WAF(Webアプリケーションファイヤーウォール)について何も知らない状態で参加した私にはありがたいご講演でした。実際にWAFが動いている環境でのデモも分かりやすく、予備知識のない私でも概要がつかめました。

徳丸さんの結論は、WAFを入れることで自動SQLインジェクション攻撃ぐらいは防げるのではないか、というものでしたね。私は開発者なので、こういうものに頼らなくて済むようコーディングするのが大前提、という発想になってしまいますが、ビジネス的に入れざるをえない場面もあるのでしょう。

資料は後日公開されるとのことです。WAFについてお知りになりたい方にはご一読をおすすめします。

追記(2008-09-30)

資料が公開されました。

現実的なWAFモジュールの実装とその運用 - wafful.org の今後の展開(竹迫さん)

「あたし竹迫」で始まる、ケータイ小説風味のご講演。私は終始笑いっぱなしでした。

mod_waffulは、apacheモジュールとしてのWAFを竹迫さんが実装されたものです。飽きたため、もうメンテナンスされないとのこと。ソースが公開されているので、開発者には参考になると思います。

質疑応答の時間に、僭越ながら「文字エンコーディングの検査は入力時よりむしろ出力時にこそ重要なのではないか」と質問しました。「DOMが壊れていたら検査しても意味がない、セカンドオーダーインジェクションも考えられるが無効化するDBアクセスライブラリを使えばよい」というご回答だったと理解しています。実は異論があったのですが、時間を割くのは気が引けて、その場では納得したふりをしました。

異論とはこういうことです。

  • たとえばUTF-8による記述を期待しているHTMLに、UTF-8として不正なバイト列を出力しようとしたら、エラーにすべきである。
  • UTF-8として不正なバイト列は、HTTPリクエストやDBからのみ入力されるわけではなく、ファイルや外部APIから入力されることもある。したがってWAFやDBアクセスライブラリのみでは防げない。
  • マークアップが不正(DOMが壊れている)なら、そもそもクライアントに返すべきではない。

認識に誤りがあれば申し訳ありません。

PHPにはhtmlspecialcharsという関数があり、第3引数として文字セットを渡せます。このhtmlspecialcharsが不正バイト列のチェックまで行うのが私の理想とするイメージです。

WAFについてのパネルディスカッション(大垣さん、園田さん、竹迫さん、徳丸さん)

関連記事に挙げられている議論の延長戦。「すべての変数をHTMLエスケープする」という、それ自体はまっとうな開発手法を、大垣さんが「ホワイトリスト的」と表現し、徳丸さんが「それはホワイトリストとは無関係でしょう」と突っ込む、見ていてドキドキする流れでした。もうちょっと見ていたかったのですが、残念ながら時間切れ。続きは懇親会で話されたのでしょうか。私は大人数に恐れをなして懇親会に参加しなかったので、分かりません。