見えるセキュリティ

DOMベースXSS

DOM-BASED XSS

この概念とは?

DOMベースXSSは、ページ内のJavaScriptが、外部から与えられた値を危険な方法で扱い、閲覧者のブラウザで意図しないプログラムが動く問題です。ここでは、URLから取り出した値が、ページの表示に使われるまでを追います。

同じURLの値でも、表示へ渡す方法によって結果が変わります。「値を取り出すところ」と「表示に使うところ」を、ブラウザの内側で見比べます。

THEME
web-vuln
KIND
attack
REVIEW
self-reviewed ·

URLから取り出した値を、HTMLとして表示へ渡す例を見ます。

ここでは、URLの「#以降の値」を読み、ページ内のメッセージ欄へ表示する例を扱います。前半はページの取得、後半はブラウザ内の処理です。

図の読み方

時間は上から下へ ↓ /「次へ」で1 STEPずつ表示

攻撃者

細工したURLを用意する

閲覧者のブラウザ

URLを開き、ページを取得する

Webサーバー

ページのHTMLとJavaScriptを返す

  1. URLの準備

    STEP 1攻撃者が細工したURLを用意する

    攻撃者が用意するURL

    https://example.test/message#[細工した値]

    #以降:攻撃者が決めた値

この図について

URLと入力は模式表現です。コードの実行や実サイトへの送信は行いません。

STEP 01 / 6

攻撃者が細工したURLを用意する

STEP 1 / 6: 攻撃者が細工したURLを用意する

現在のSTEP 1STEP 2STEP 3STEP 4STEP 5STEP 6

攻撃者は、メッセージを表示するページのURLに、細工した値を入れます。この例では「#」の後ろに値を置き、そのURLを別の人に開いてもらおうとします。

技術的な詳細を見る

URLの「#」から後ろをフラグメントと呼びます。この教材では、サイト側のJavaScriptがそこから表示用の値を読む設計を例にします。URLに値を入れただけで、その値が自動的に実行されるわけではありません。

パネルの開閉ではSTEPは変わりません。

この概念の要点

  • 要点

    ブラウザ内の処理を追う

    ページを受け取った後、サイト側のJavaScriptが入力をどう使うかに着目します。

  • 要点

    読み取りと使い方を分ける

    値があることや読むことだけではなく、どの処理へ渡すかが重要です。

  • 要点

    文字を表示する方法を選ぶ

    今回のメッセージ欄では、textContentで文字として設定する方法を比べました。

  • 要点

    分類は重なることがある

    反射された値や保存された値を、ブラウザ側で危険に扱う場合もあります。

理解確認

この例で、入力がDOMベースXSSにつながる使い方として適切な説明はどれですか?

参考資料

RELATED CONCEPTS