サーバの複雑さが変えたセキュリティ「サニタイズ」とは:スパム時代のサニタイズ開発手法(2/2 ページ)
Webサイトとして公開されているサーバには、いったい幾つのソフトウェアが含まれているだろう。サービス指向でシステム化が進む現代、数十から数百のツールが連携し合って成り立っているものが多い。複雑化したサーバの防御策は?
サニタイズの考え方は昔からあったもの
CGIスクリプトなどのWebアプリケーションでは、タグを特殊文字としてブラウザに機能させないことが重要だ。その機能は無効化しておくことで防御が可能なのだ。
この処理のことを「サニタイズ」と呼ぶ。
サニタイズ(Sanitize)は直訳すれば「消毒する」という意味だ。この言葉自体は、比較的最近になってから使われるようになったため、読者には親しみがないかもしれない。しかし、1997年前後のCGIがブームとなった当時から、「タグの無効化」という仕組みは存在していた。特に、掲示板システムではタグの無効化は必須となっていたテクニックなのだ。
そうとはいえ、タグの無効化だけでWebアプリケーションのセキュリティホール(脆弱性)がすべてなくなるというわけではない。あくまでサニタイズはセキュリティホール(XSS)対策のための一手段にすぎないことを認識しておいてほしい。予期せぬ情報漏えいを防ぐための、最後の切り札と考えておくのがよいだろう。
タグの無効化は言語によって異なる
デベロッパーのためにもう少し突っ込んだ見解も示しておこう。
タグの無効化とひと口に言っても、Webアプリケーションの開発言語によって記述方法が異なっている。
CGIスクリプトで多用されているPerl言語では、比較的簡単に記述することができる。以下にサンプルコードを示す。詳細を知りたい読者はソースコードを見てほしい(関連リンク)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Perlではコメントを「#」で始まる一行で記述することができる。コメントはプログラムの動作には何ら影響を与えないものだが、ソースコードの可読性を良くするために残すものだ。コメントが適切に付けられたコードは、メンテナンスが必要なときに読みやすいプログラムとなる。
Perlでは変数を「$」で始まる文字列で利用することができる。プログラムにおいて変数はいわば一時的なメモリ領域である。
「s///」を使うことにより、文字の置換が行えるのだ。
変数 =~ s/文字1/文字2/g;
上記のような書き方をすると、変数に格納されている文字列を先頭から走査し、「文字1」を探して「文字2」に置き換えるという処理を行う。
文字1と文字2は文字列でも構わず、「s///」の末尾に「g」(globalの略)が付加されているのは、置換作業を1回だけではなく、置換対象文字がなくなるまで行うという意味だ。
実際の処理はタグの置換というシンプルなものだが、プログラム本来の処理ではないため意外と見落とされやすい。
関連記事
- 巧妙化するネット地雷原の避け方
- あのCGIがクラックされてしまった理由
- Perlは悪くない――CGIセキュリティホールの落とし穴
- Cookieは悪くない――潜む漏えいパターンの真実
- セキュリティホールで問うこれからの常識
- ネットセキュリティの考え方が変わった理由
- 攻撃の標的がOSからアプリにシフト――SANS Institute報告書
- セキュリティを意識したネットワークシステム設計、5つのポイント
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.