会員が投稿した文章を、内容を確かめないまま他の会員のページにそのまま表示して しまうWebサイトがある。この不備を突かれてクロスサイトスクリプティングを 受けた場合に起こることとして、最も適切なものはどれか。
正解:イ
アサイトのデータベースに保存されている会員情報が、まとめて外部へ抜き取られる。
誤り。これはSQLインジェクションで起こりうる被害です。入力の扱いの不備を突く点は 同じですが、狙いはデータベースへの命令の書き換えで、被害はサイト側に出ます。
イ投稿を閲覧した他の会員のブラウザで不正なスクリプトが動き、情報を盗まれる。
正解。投稿欄を通じて紛れ込ませたスクリプトが、そのページを見た他の利用者の ブラウザ上で動きます。被害を受けるのは投稿者ではなく、閲覧した利用者です。
ウサイト自体が改ざんされ、閲覧しただけで会員の端末にマルウェアが送り込まれる。
誤り。これはドライブバイダウンロードです。閲覧者が被害を受ける点は似ていますが、 投稿内容ではなくサイトそのものが改ざんされて成立します。狙いは端末への感染です。
エ想定を超える長さのデータを送り込まれ、サーバのプログラムが乗っ取られる。
誤り。これはバッファオーバーフローです。入力の検証不足という点は共通ですが、 狙うのはプログラムが確保したメモリ領域で、画面表示の仕組みとは関係しません。
「誰が被害を受けるか」で区別する
クロスサイトスクリプティングは、掲示板やレビュー欄のように他人が書いた内容を そのまま画面に出す仕組みを悪用します。攻撃者は表示させるための命令を投稿に 紛れ込ませ、それを閲覧した別の利用者のブラウザで動かします。
投稿を見に来ただけの利用者が、ログイン状態の情報を抜かれたり、偽の入力欄を 出されたりします。攻撃者と被害者が直接やり取りしていないのが特徴です。
SQLインジェクションと並べると線が引ける
どちらも「入力された文字を確かめずに扱った」ことが原因なので混同されますが、 書き換えられる先が違います。
| 攻撃 | 何を書き換えるか | 被害を受けるのは |
|---|---|---|
| クロスサイトスクリプティング | 閲覧者のブラウザで動く内容 | サイトの利用者 |
| SQLインジェクション | データベースへの命令 | サイト側のデータ |
| ドライブバイダウンロード | サイトそのもの(改ざん) | 閲覧者の端末 |
試験での見分け方
問題文に「他の利用者」「閲覧した人」が出てきたらクロスサイトスクリプティング、 「顧客情報が大量に流出」「保存されたデータが読み出された」ならSQLインジェクションを まず疑います。いずれも入力された文字を無害な文字として扱う処理を入れることで 成立しなくなる、という点は共通しています。