サイバー攻撃の中には、Webサイトに存在する脆弱性を悪用するものもある。代表的なのがクロスサイトスクリプティングだ。この脆弱性を悪用する攻撃を実験で確かめてみよう。

 そうした攻撃が可能になる典型的な例は、ユーザーが送ったパラメーターの値をそのまま表示するようなWebサイトだ。

受け取ったパラメーターをそのまま表示するのは危険
[画像のクリックで拡大表示]

 GETリクエストの場合には、URL(Uniform Resource Locator)の末尾に「?」を付与し、その後に「パラメーター=値」と記述することで、パラメーターが送られる。

 攻撃者は、パラメーターの中にJavaScriptのコードをscript要素として埋め込んだURLを用意する。ユーザーがこのURLにアクセスすると、そのJavaScriptコードがWebブラウザー上で実行されてしまう。

 攻撃者がURLを埋め込んだリンクを書き込むWebサイトと脆弱性を悪用されるWebサイトは別なので、「クロスサイト」と呼ばれる。

 この攻撃を防ぐため、実際にはパラメーターをHTMLとして解釈されないようにエスケープ処理を施すのが一般的だ。

Chromeでは標準でブロック

 では、実験で試してみよう。まず、クロスサイトスクリプティング脆弱性を持つWebサイトを用意した。

クロスサイトスクリプティング脆弱性を持つWebサイトを用意
[画像のクリックで拡大表示]

 Pythonで手軽にWebサイトを実現できるBottleというWebアプリケーションフレームワークを利用した。コードの1行目ではbottleからroute、run、 requestの3つの関数をインポートしている。

 Bottleでは、URLのディレクトリーを「@route」で指定する。「@」は、Pythonのデコレーターという機能を利用するという意味だ。ここではルートディレクトリー(root)を表す「/」を指定している。

 Webページの内容は、index関数として定義する。「q」という名前のパラメーターを受け取るようにしている。

この先は有料会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら