第02回まっちゃ445勉強会に参加した
竹迫さん(id:TAKESAKO)によるmod_wafful話が聞けそうだ、ということで参加表明した勉強会。表明後、徳丸さん(id:ockeghem)・大垣さん・園田さん(id:sonodam)が登壇されることが決まり、願ってもない流れに。
勉強会開始直後は、知らない方(あるいは私が一方的に知っている方)ばかり60名の中、正直アウェー感を感じずにはいられなかったのですが、最終的には満足感・充実感でいっぱいになりました。スタッフの皆様、講師の皆様、参加者の皆様、本当にありがとうございます。
勉強会は4部構成でした。1部は自己紹介タイム、2部以降が本編です。
WAF入門 〜原理、効果、限界〜(徳丸さん)
WAF(Webアプリケーションファイヤーウォール)について何も知らない状態で参加した私にはありがたいご講演でした。実際にWAFが動いている環境でのデモも分かりやすく、予備知識のない私でも概要がつかめました。
徳丸さんの結論は、WAFを入れることで自動SQLインジェクション攻撃ぐらいは防げるのではないか、というものでしたね。私は開発者なので、こういうものに頼らなくて済むようコーディングするのが大前提、という発想になってしまいますが、ビジネス的に入れざるをえない場面もあるのでしょう。
資料は後日公開されるとのことです。WAFについてお知りになりたい方にはご一読をおすすめします。
現実的な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が不正バイト列のチェックまで行うのが私の理想とするイメージです。