見えるセキュリティ

蓄積型XSS

STORED XSS

この概念とは?

蓄積型XSS(保存型XSSとも呼ばれます)は、投稿などに含まれる細工した入力が保存され、後からページに使われたときに、閲覧者のブラウザで意図しないスクリプト(プログラム)が動く問題です。投稿する場面と、別の人が読む場面を分けて見ていきましょう。

保存された投稿が、後の閲覧でどう使われるのか。同じ投稿を使い、危険な表示と、文字として安全に表示する方法を比べます。

THEME
web-vuln
KIND
attack
REVIEW
self-reviewed ·

保存した投稿を、適切な出力処理をせずページへ組み込むとどうなるかを見ます。

ここでは、保存した投稿をサーバーがHTML本文へ組み込む例を扱います。保存済みのデータも、表示するときの扱いが重要です。

図の読み方

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

攻撃者

投稿する内容を細工する

閲覧者のブラウザ

後からページを要求し、返されたHTMLを解釈する

Webサーバー

投稿の受付、保存・読み出しの指示、HTMLの組み立てを行う

投稿の保存先

保存された投稿を保持する

  1. 投稿・保存

    STEP 1攻撃者が投稿を送る

    攻撃者からWebサーバーへ。

    細工した投稿

    [表示を書き換える指示を含む投稿]

この図について

投稿は模式表現です。コードの実行や実サイトへの送信は行いません。保存と、HTML本文へ文字として安全に表示する処理は別です。

STEP 01 / 7

攻撃者が投稿を送る

STEP 1 / 7: 攻撃者が投稿を送る

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

攻撃者が、細工した内容を投稿欄から送ります。サーバーには、その内容が入力データとして届きます。この段階では、閲覧者のブラウザでプログラムが動いたわけではありません。

技術的な詳細を見る

この例では、攻撃者が投稿でき、その内容を後から他の人が読む機能を想定します。入力元は投稿欄に限りませんが、ここでは経路を1つに絞ります。投稿のために送る要求と、後の閲覧要求は別です。

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

この概念の要点

  • 要点

    投稿するときと、閲覧するときは別。

    保存した入力が、後のページ表示に使われます。

  • 要点

    保存済みでも安全とは限らない。

    読み出した値を、どの出力先でどう扱うかが重要です。

  • 要点

    実行されるのは閲覧者のページ。

    同じ投稿が危険な形で繰り返し表示されれば、別の閲覧者にも影響し得ます。

  • 要点

    文字を表示するための処理を選ぶ。

    この例ではHTML本文への出力エンコードを使い、原本の削除とは分けて考えます。

理解確認

細工した投稿を保存した後、別の人の閲覧でXSSにつながる理由として、適切なものはどれですか?

参考資料

RELATED CONCEPTS