全1515文字
PR
無料セミナー
接触確認アプリ、本当に使う?~公益のための個人データ活用とは 6/8 18時

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

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

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

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

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

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

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

Chromeでは標準でブロック

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

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

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

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

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