トップに戻る
【初心者向け】サンプルコード付き!XSS(クロスサイトスクリプティング)の攻撃例
 > 
プログラミング > 
HOME > 
2023/11/03
2024/02/06

【初心者向け】サンプルコード付き!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
Postsテーブル(IDについては省略)

現状のデータはただの文字列だけが存在しているため、当然何の脅威もありません。

ではここで、第三者が悪意あるテキストチャットを打ち込んだとしましょう。

投稿されたデータが、以下のように格納されました。

post_content
Hello
World
<script>location.href=”https://www.youtube.com/”</script>
Postsテーブル(IDについては省略)

先ほど例で示したスクリプトが、投稿データとして保存されています。

先述したように、サイトにアクセスがあった際、このデータベースのデータを画面上に描画します。

すなわち、以下のようなプログラムが、サイトを訪問した全てのユーザに対して実行されるということです。

<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上に埋め込むことで、サイトの機能をも停止させ得る危険な攻撃手法です。

フレームワークやライブラリを使っている場合、それらの機能で勝手に対策してくれていることも多いですが、自身で一からサイトを作る場合には、十分に注意しておくべきでしょう。

SHARE