見えるセキュリティ
XSSの基本
XSS BASICS
この概念とは?
XSS(クロスサイト・スクリプティング)は、入力の扱いに問題があるため、Webページを見ている人のブラウザで、意図しないスクリプト(プログラム)が動いてしまう問題です。まずは「表示する文字」と「動かすプログラム」の違いから、何が起きるのかを見ていきましょう。
入力がどこから来て、どの処理を通り、誰のブラウザで何が起きるのか。6つの観点でXSSの全体像を整理します。
- THEME
- web-vuln
- KIND
- attack
- REVIEW
- self-reviewed ·
外部から来た入力の扱いと、閲覧者のブラウザで起きることを整理します。
各STEPは理解を深めるための順番です。1回の通信を順に再現する図ではありません。
閲覧者のブラウザ
表示する内容
こんにちは
サイトが用意した動作
ボタンに応じて表示を切り替える動作
STEP 01 / 6
ページには「文字」と「動き」がある
STEP 1 / 6: ページには「文字」と「動き」がある
Webページには、読む文字や画像と、操作に応じて表示を変えるプログラムがあります。HTMLはページの内容や構造を表し、JavaScriptは動きを付けるための言語です。まずは、表示する文字と動かすプログラムを分けて見てみましょう。
技術的な詳細を見る
HTMLはページの内容や構造を表すマークアップ言語です。JavaScriptは、ページの更新や操作への応答などを行います。HTMLにはスクリプトに関わる要素や属性もありますが、文字を表示するだけの処理が、必ずプログラムの実行を伴うわけではありません。
この概念の要点
要点
表示するデータと動かすコードを分ける。
入力がどの処理へ渡され、どう解釈されるかが重要です。
要点
実行されるのは閲覧者のページ。
そのサイトで扱う情報や操作に影響し得ますが、影響範囲は条件によります。
要点
入力の経路と処理場所は別の観点。
反射型・蓄積型とDOMベースは、同じ事例に重なる場合があります。
要点
使う場所に合う対策を選ぶ。
文字を表示する処理と、HTMLを許可する処理では、必要な安全化が異なります。
理解確認
参考資料
- IPA安全なウェブサイトの作り方 1.5 クロスサイト・スクリプティング
概要、発生しうる脅威、1.5.1の根本的解決
- CWECWE-79
CWE-79Description、Extended Description、Alternate Terms、Potential Mitigationsの出力文脈と入力元
- 参考資料HTML: HyperText Markup Language
冒頭のHTMLの役割、CSS・JavaScriptとの役割の違い
- 参考資料Cross-site scripting (XSS)
定義、Overviewの対象サイトの文脈で動く説明
- 参考資料Element: innerHTML property
Value、Security considerations。script要素の非実行とイベントハンドラーを通じた実行の違い
- 参考資料Node: textContent property
Value、Differences from innerHTML、Examples
- OWASPCross Site Scripting Prevention Cheat Sheet
Output Encoding、Dangerous Contexts、HTML Sanitization、Safe Sinks、Other Controls
- 参考資料DOM-based XSS
What is DOM-based cross-site scripting?、DOM XSS combined with reflected and stored data
- 参考資料Cross-site scripting
Reflected、Stored、DOM-based cross-site scripting各節