top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
インジェクション攻撃とかサニタイジングとかいう用語に業務上 強制的に携わっている今日このごろ…
ここのところ インジェクション攻撃やサニタイジングという用語と業務上 出会うことが多く、私のなかでは強制的に流行語となっています。
(苦笑) そんな中、下記の@ITの記事が (アタマの中では意図は理解できるのですが) 気になってしょうがなかったです。
「説明のために敢えてこのようなプログラムを提示いているのだ」ということはアタマで理解しています。私も説明用とかサンプル用として、敢えてAPIを利用せずにベタ書きすることも良くあります。連載ものになっていて、積み上げで現在のXMLベースの説明になっていることも理解します。.NET Frameworkに XML関連APIがいくつも存在していることも知っています。(以前 業務として ぎとぎとの .NET系 XML案件 (C#.NET) のプロデュースに携わったこともあるからです。.NET系のXML APIは 結構高速に動作します) 総じて、この記事の意図しているところのデザインパターンの説明のために こうやって書いていることもよく分かります。
そこまでアタマでは理解した上で、でも、どうしても「インジェクション攻撃」などという脆弱性観点に業務上強制的に携わされている身として、このサンプルプログラムが「XMLインジェクション攻撃に耐えうるのだろうか?」などということが気になって仕方がありません。(単に私の職業病的くせなのです…) べつに この記事とは別のところでも世のサンプルの SQL文を見ていても同様なのです。SQLのサンプルと可だと、パラメータ・クエリを利用しないサンプルとかを見ていても、サニタイジングが気になってどうしても反応してしまいます。ほんとうに単純に職業病みたいなものなのでしょう。SQLもXMLも、そしてHTMLも、適切にサニタイジングされているかどうか、っていうパスばかりを見てしまいます。実際の実務・業務的な立場として各種ソースコード・レビューとかに参画している際も、そんなことばっかり見ています。というかそういう時は そういうセキュリティ上の観点を持ってレビューを行うのが業務上の役目だからにほかなりません。
話はまったく別のところに飛んでいって、XMLパーサを自作してみると良くわかるのですが、XML APIの仕事で本当に大事なことのひとつは サニタイジング関連の処理です。プログラムが XMLインジェクションという脆弱性を発生させないために、適切にサニタイジングを行ってくれているのです。同様のことは Strutsタグなどにもあらわれます。あれらAPIが Servletと根本的に異なるAPI性には サニタイジング処理があります。普段 なにげに利用しているAPIも よくよく考えたらサニタイジングを行ってくれているってことは不思議なものですね…。XML APIのありがたみをかみしめました。
blancoCommonsに関して思考を行っていたら、ふと Jakarta Commonsをチェックしなおすことになりました。改めて見てみて、やはり Jakarta Commons は偉大です。すばらしい共通クラスがいくつもあります。その中で やはり私が気になるのは下記の2つです。
Jakarta Commons/Net - Jakarta Commons Net http://jakarta.apache.org/commons/net/ 多くのプロトコルをサポートしていますね。すばらしいです。SMTP, POP3, NTPとかもサポートしているというのを改めて思い知りいました。
Commons VFS - Commons Virtual File System http://jakarta.apache.org/commons/vfs/ Sandboxを卒業して Commons直下に移ったばかりですが、もう、このクラスライブラリが 気になって気になってしょうがありません。今 振り返ってみたら、2000年ころに Java言語による仮想ファイルシステムが構築できないか、ぼんやりと考えていたようです。(URIベースでシェルを作ろうとしていたから…) 、、、ふむ、Jakarta Commons VFSを利用したら、あの当時 構想していたシェルやファイルマネージャが簡単に実装できそうな気がしてきました。
とにかく、時間をつくって Commons VFSや Commons Netを勉強してみたいです。
Webアプリの表示部分とかは 実行時にリソースバンドルを利用するなのして ロケール切り替えに対応している必要がありますが、業務ログとかシステムログのたぐいは、実は実行時に動的なロケール切り替えの対応は必要ないのかしら、などと悩み中。