見えるセキュリティ
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を返す
URLの準備
STEP 1攻撃者が細工したURLを用意する
攻撃者が用意するURL
https://example.test/message#[細工した値]
#以降:攻撃者が決めた値
STEP 01 / 6
攻撃者が細工したURLを用意する
STEP 1 / 6: 攻撃者が細工したURLを用意する
攻撃者は、メッセージを表示するページのURLに、細工した値を入れます。この例では「#」の後ろに値を置き、そのURLを別の人に開いてもらおうとします。
技術的な詳細を見る
URLの「#」から後ろをフラグメントと呼びます。この教材では、サイト側のJavaScriptがそこから表示用の値を読む設計を例にします。URLに値を入れただけで、その値が自動的に実行されるわけではありません。
この概念の要点
要点
ブラウザ内の処理を追う
ページを受け取った後、サイト側のJavaScriptが入力をどう使うかに着目します。
要点
読み取りと使い方を分ける
値があることや読むことだけではなく、どの処理へ渡すかが重要です。
要点
文字を表示する方法を選ぶ
今回のメッセージ欄では、textContentで文字として設定する方法を比べました。
要点
分類は重なることがある
反射された値や保存された値を、ブラウザ側で危険に扱う場合もあります。
理解確認
参考資料
- 参考資料DOM-based XSS
What is DOM-based cross-site scripting?、DOM XSS combined with reflected and stored data
- 参考資料Document Object Model (DOM)
冒頭、Concepts and usage
- 参考資料URI fragment
冒頭、Description
- 参考資料Location: hash property
冒頭、Examples
- 参考資料URL: hash property
冒頭の読み取り時にpercent-decodeしない説明
- 参考資料decodeURIComponent()
Return value、Exceptions、Description
- 参考資料Element: innerHTML property
Value、Description、Security considerations
- 参考資料Node: textContent property
Value、Differences from innerHTML
- 参考資料DOM Standard/Node.textContent
§4.4のtextContent setter、set text content、string replace all
- OWASP
- OWASPCross Site Scripting Prevention Cheat Sheet
HTML Sanitization、Safe Sinks、Other Controls