【初心者向け】サンプルコード付き!XSS(クロスサイトスクリプティング)の攻撃例
WEBサイト、WEBサービスにおけるサイバー攻撃の手段としても有名なのが、XSS(クロスサイトスクリプティング)です。
昔から認知されている攻撃手法ではありますが、具体的にどういった攻撃かと言われると、いまいち具体例が出せない、という方も多いのではないでしょうか。
今回は、XSSの攻撃例をサンプルコードを交えながら、どういった仕組みで攻撃が行われるかを解説していきます。
XSSとは?
XSSは、以下のようなスクリプトをWEBサイトに埋め込んでしまう攻撃手法です。
// Youtubeに飛ばされる処理
<script>location.href="https://www.youtube.com/"</script>
上のscriptタグは、読み込まれる際に中のコードをコンパイルして実行するため、このコードを貼り付けたHTMLファイルをChromeで開くと、即座にYoutubeの画面に飛ばされます。
これだけではどういう攻撃なのかイメージしにくいと思うので、ここからはサンプルコードと合わせて攻撃の仕組みを見ていきましょう。
XSSの攻撃例
XSSの仕組みについて手っ取り早く理解するために、ここでは以下のようなプログラムを作ってみます。

画像少し見切れていますが、要するに
アクセスしたらscriptタグの文字列を表示するプログラム
を作ろう、という話です。
サンプルコード
今回はAPIのような形ではなく、シンプルにPHPファイルに直接アクセスするだけでデモが出来るので、以下のようなPHPファイルを作ればOKです。
<?php
$content = '<script>location.href="https://www.youtube.com/"</script>';
?>
<html>
<body>
<p class="content">
<?php echo $content; ?>
</p>
</body>
</html>
上記のPHPファイルをWEBブラウザで読み込むと、問答無用でyoutubeのトップページに飛ばされます。
一応、これだけでもXSSのデモとしては成り立っています。
掲示板サイトでXSS攻撃する例
ここでは、簡単な例として掲示板サイトにXSSする例をご紹介します。
※データベースを絡めると説明が面倒なので、今回は省略
ここでいう掲示板サイトは、以下のようなPostsテーブルが存在し、サイトにアクセスがあった際に保存されている投稿データを表示するだけの機能を備えています。
| post_content |
|---|
| Hello |
| World |
現状のデータはただの文字列だけが存在しているため、当然何の脅威もありません。
ではここで、第三者が悪意あるテキストチャットを打ち込んだとしましょう。
投稿されたデータが、以下のように格納されました。
| post_content |
|---|
| Hello |
| World |
| <script>location.href=”https://www.youtube.com/”</script> |
先ほど例で示したスクリプトが、投稿データとして保存されています。
先述したように、サイトにアクセスがあった際、このデータベースのデータを画面上に描画します。
すなわち、以下のようなプログラムが、サイトを訪問した全てのユーザに対して実行されるということです。
<html>
<body>
<p class="content">
<?php echo 'Hello'; ?>
</p>
<p class="content">
<?php echo 'World'; ?>
</p>
<p class="content">
<!-- XSSのデータ -->
<?php echo '<script>location.href="https://www.youtube.com/"</script>'; ?>
</p>
</body>
</html>
当然、このプログラムが実行されると、画面上に投稿データは表示されず、そのままYoutubeの画面に直行します。
要するに、こういった攻撃を許容してしまうと、WEBサイトの機能が完全に停止してしまうのです。
XSSは現代ではほぼ見ない
掲示板サイトの例を見てわかりますが、XSSは非常に単純な方法で実現できてしまうものであり、はっきり言って誰でもできる初歩的な攻撃手法です。
対策手法自体も、スクリプトとして読み込まれないようにデータのサニタイズを行うだけで良いため、現代ではほぼ全てのサイトで対策されているでしょう。
まとめ
XSSは、スクリプトを文字列としてDB上に埋め込むことで、サイトの機能をも停止させ得る危険な攻撃手法です。
フレームワークやライブラリを使っている場合、それらの機能で勝手に対策してくれていることも多いですが、自身で一からサイトを作る場合には、十分に注意しておくべきでしょう。