Webサイトを構築した時のセキュリティ対策として、XSS(クロスサイトスクリプティング)への対応を行うと思いますが、単純なテストケースを作って問題ないと判断しても、実は結構なリスクが隠れてたりする、ということは良くあります。
また、どこまでのテストをすればよいのかわからないと言うエンジニアも多いと思いますので、客観的なテストツールなどがあれば便利です。
XSS対策ツールとして、FireFoxアドオンのXSS Me を使えば、かなり簡単に対応状況をレポートで見ることができます。
XSS Meでチェックしてみるフォーム
まず、最初にXSS MeでチェックしてみるHTMLを用意します。
今回は、簡易的に2つのテキストボックスを用意して、送信先(hoge.php)にて一方のテキストボックスのデータの内容を実体参照に変換し(XSS対策あり)、もう一方のほうはそのまま画面へ出力(XSS対策なし)してしまうものを用意してみました。
<form action="hoge.php" method="post" name="form1"> ID:<input type="text" name="id" size="50"><br /> NAME:<input type="text" name="name" size="50"><br /> <input type="submit" value="送信" name="button1"> </form>
データを受信するhoge.phpは、こんな感じ
<?php // ID属性のテキストボックスの内容をエスケープ echo htmlspecialchars($_POST['id']), ENT_QUOTES); echo "<br />"; // NAME属性のテキストボックスの内容はそのまま echo $_POST['name']; ?>
この状態だと、XSS対策がされていないname属性のテキストボックスに「<script>alert('test');</script>」みたいな文字を入力してみると、下記のようにアラートのダイアログが出てきてしまいます。
また、ID属性のテキストボックスに埋め込まれた内容は実体参照に変換されてるからといって、これだけで安心なのか、と言う不安もあったりします。
XSS Meでテストしてみる
では、実際にFireFoxアドオンのXSS Me を使ってみましょう。
インストールが完了すれば、チェックしたいページでXSS Meを開きます。(ツール > XSS Me > Open XSS Me Sidebar)
XSS Meを開くと該当ページに対するフォームとHTML要素の一覧が表示されます。
該当のHTML要素(例えばテキストボックス)に対してどのようなテストをしたいか、プルダウンメニューよりテストケースを選択できます。
ただ、どれをテストすればいいのか良くわからないとか、一つ一つテストするのが面倒だと言うのであれば、その上にある「Test all forms with all atacks」というボタンを押せばよいでしょう。
全てのフォームに対して、XSS Meで持っている全てのテストケースを実行してくれます。
XSS Meの実行結果のレポートを見てみる
実行結果は全て英語になりますが、視覚的にわかりやすく表現されていますので、難しいことは無いと思います。
一番上には、XSSの脅威となりえる8つの記号が表示され、それぞれテスト結果できちんとエスケープなどの処理がされているかが表示されます。
その次には、テスト結果で問題となる点、注意すべき点などの総数がグラフで表示されます。
さらにレポートを読み進めると、問題点や注意点に対する詳細が書かれています。
これまた英語にはなりますが、テストした結果どのような危険性があるのかが書かれています。
一応エスケープしていたID属性のテキストボックスですが、危険があることがわかったので、多少乱暴ですがその他の危険性のある文字列を無効化するような処理を加えて見ます。
<?php // 削除する文字列 $escape_char = array("/", "=", ";", "\\"); // ID属性のテキストボックスの内容を出力 echo htmlspecialchars(str_replace($escape_char, "", $_POST['id']), ENT_QUOTES); echo "<br />"; // NAME属性のテキストボックスの内容はそのまま echo $_POST['name']; ?>
これで実行してみると・・・。
危険性のある記号については、ちゃんと処理されていることがわかりますね。
これで絶対安心と言うわけではないでしょうが、テストを簡易的に行いたいとか、ページの安全度を客観的に判断したいとか、そういった使い方にはかなり有効なツールになるのではないでしょうか。
[PR]So-netでauひかり!今なら20,000円キャッシュバックキャンペーン実施中!
[PR]SSLはグローバルサイン(最短2分で発行、年額36,540円)
関連記事
コピー&ペーストを自由にカスタマイズできるFireFoxアドオン - FireLink
mod_actionsを使ってドキュメントや画像、Flashファイルを保護する
FireFoxで自由にリファラを制御できるアドオンRefControl
タブの色を変えられるFireFoxアドオン - FlagTab
セキュリティ診断ツール「Nikto」を使ってサイトをチェックしよう