Webサイトとして公開されているサーバには、いったい幾つのソフトウェアが含まれているだろう。サービス指向でシステム化が進む現代、数十から数百のツールが連携し合って成り立っているものが多い。複雑化したサーバの防御策は?
Webサイトに対する攻撃は、OSそのものの脆弱性やミドルウェアなどの比較的OSレイヤーに近いものが多かった。それが最近では変化し、アプリケーション層にまで拡大している(関連記事)。この原因となっているのは、インターネットサーバとひと口に言っても、さまざまなソフトウェアが複雑に連携して成り立っている点だ。
サーバの運用者はすべてのソフトウェアの脆弱性を日々チェックし、常に監視を怠らないようにしなければならない。これが情報漏えいを防ぐために課せられている現状なのだ。
これまでにオンライン・ムック「スパム時代のサニタイズ開発手法」では、「Perlは悪くない――CGIセキュリティホールの落とし穴」などで、クロスサイトスクリプティング(XSS)による脆弱性の考え方について解説した。今回は、XSSによる脆弱性をどのように防ぐべきかがポイントだ。
この記事の目的は、ITmedia エンタープライズのニュースを深く読み解くために、その考え方と具体的な手段について紹介していくことだ。コアとする対象読者は、日ごろオフィスアプリケーションなどを使うビジネスユーザーである。
XSSによる脆弱性をなくすものとして現在幅広く使われてきているのが、ユーザー(ブラウザ側)から故意に入力されたタグを無効にする手段だ。
XSSの脆弱性となり得る可能性のタグは、一般的に次に挙げる文字である。これらの文字は、ブラウザから見れば、単なる文字列ではなく特殊な処理(タグとして機能)を行う文字として扱われるのだ。
無効にする手段としては幾つか考えられるが、タグ文字そのものをすべて無効化するのが早道だろう。しかし、これらの文字を扱うシステムではそのようにはいかない。
それではどうすればよいのか?
ユーザーが上記の文字をブラウザ上から入力した場合、Webアプリケーションではタグとしてではなく、単なる文字列として扱うようにすればよいのだ。
タグを規定するW3CのHTML 4.01の仕様書(5.3.2 Character entity references)には、文字実体参照(Character entity references)と呼ばれる手段が記載されており、特殊文字をASCII文字として表示することができる(関連リンク)。
以下に対応表を示そう。
文字 | 記法 | 意味 |
---|---|---|
< | < | less than sign |
> | > | greater than sign |
& | & | ampersand |
" | " | double quotation mark |
ところが、シングルクォーテーション「'」が上記の仕様には見当たらない。
そこで、HTML 4.01の仕様書(5.3.1 Numeric character references)を見直すと、文字コードをISO10646で指定することで、表すことができるとある。ISO10646とは、簡単に言えばUnicodeのことだ。
Unicodeの値が幾つになるかは、Windowsであればアクセサリのシステムツール「文字コード表」で確認することができる。
「文字コード表」からすると、シングルクォーテーションは16進数で27(10進数では39)となっている。なお、Unicodeでは文字コード値は「U+XXXX」と表記する。よって、'、および'と記述すればよいことが分かる。
文字 | 記法 | 意味 |
---|---|---|
' | ' | single quotation mark |
ここまでを要約しよう。
Copyright © ITmedia, Inc. All Rights Reserved.