実際にサンプルページで確認してみた!クロスサイトスクリプティング(XSS)の危険性!

代表的なサイバー攻撃の一つにクロスサイトスクリプティング(XSS)があります。今回は、実際にサンプルページを作り具体的にXSSがどんなものなのかを確認しました!

クロスサイトスクリプティング(XSS)とは

XSSとは「脆弱性のある動的サイトに悪意のあるスクリプトを送信する攻撃」のことです。

この攻撃により、偽のWebページが表示されたり、HTTPクッキーに保存されている情報が抜き取られる恐れがあります。場合によっては、マルウェア感染や情報漏えいなどの被害が起こりえます。

XSSの被害は以下のような流れで起こります。

STEP.1
①攻撃者が掲示板サイトにクッキー情報を抜き取るスクリプトを含むURLを投稿する
STEP.2
②ユーザーがURLをクリックする
STEP.3
③ユーザーのクッキー情報が攻撃者に送信される
STEP.4
④攻撃者はユーザーのクッキー情報を使って不正ログインし、悪用する

Webページでの確認

実際にサンプルページを作成し、入力フォームからスクリプトを含むURLを投稿して、スクリプトを実行してみたいと思います!

Webページの作成

まずは、サンプルページを作成します。フォームから入力した値が表示される簡易的な掲示板サイトを作り、XSSを確認していきます。

下記のソースでPHPファイルを作成しました。

test.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS確認</title>
</head>
<body>
   <form action="" method="post" accept-charset="utf-8">
   <label class="label" for="name">コメント:</label>
       <input type="text" size="70" name="xss_text" value="">
       <p><input type="submit" value="送信"></p>
   </form>
   コメント一覧: <?php echo $_POST['xss_text']; ?>
</body>
</html>

このソースで、下図のようなページが表示されます!

コメントの右の入力フォームに値を入れ、送信ボタンを押すと、コメント一覧に入力値が表示される動的なWebページとなります!

実際に、入力フォームに「イーアイティです」と入力すると、下記のとおり入力値が表示されます。

これでXSSを確認する準備ができました!

スクリプト入力

では、実際にXSSを行います!

入力値
<a href=javascript:alert(“XSS”);>イーアイティのURLです</a>

送信ボタンを押すと、コメント一覧に「イーアイティのURLです」というURLが表示されます。

それでは、表示されている「イーアイティのURLです」をクリックしてみましょう!

リンクをクリックすると、、、

画像のように、アラートメッセージが表示されます。

入力した値はjavascriptで「XSS」をアラート表示させる処理であるため、リンクをクリックするとアラートが表示されてしまうのです。

このように、XSS対策されていないサイトでは自由にスクリプトを埋め込むことができます!

POINT

今回は例として単なる文字列のアラート表示でしたが、ここにクッキー情報を出力するようなアラートが仕込まれれば、クッキー情報が表示されてしまいます!

攻撃者のサイトにクッキー情報が送信されるようなスクリプトを仕込まれれば、クッキー情報が抜き取られてしまうのです!

ちなみにChromeでは、入力フォームにスクリプトを埋め込もうとすると、デフォルトでERR_BLOCKED_BY_XSS_AUDITOR(下図)となりXSSが対策されています。

今回は確認のため、Chrome起動時にXSSフィルタ機能を無効にしています。

Chrome以外の多くのブラウザについてもXSSフィルタ機能が内蔵されているようです。しかしながら、ブラウザに内蔵されているXSSフィルタ機能は、あくまでも補助的対策と位置付けられているため注意が必要です。

まとめ

いかがでしたか?

実際にサンプルページで確認してみると、どのようにしてXSSが行われるのかイメージしやすいのではないでしょうか。

XSS等の対策としては、開発者目線では、特殊文字(”,<,>,’,&)にエスケープ処理を施し、スクリプトの実行を阻止すること等が必要になります。

利用者目線では、最新のブラウザにアップデートする、怪しいリンクはクリックしない等意識する必要があります。

また、今回はXSSを取り上げましたが、サイバー攻撃手法はXSS以外にもSQLヘッダインジェクション、クロスサイトリクエストフォージェリ等、種類があります。

サイバー攻撃対策を行うには、まずは様々な攻撃手法を知ることから始める必要があると感じました。